I have 3 database tables: providers, regions, and VendorRegions:
Vendors ------------------- VendorID (PK) Name Regions ------------------- RegionID (PK) Name VendorRegions ------------------- VendorID (PK) RegionID (PK)
On my page, to create a provider, I list each region in the checkbox list. For each region being checked, I would like to add VendorID and RegionID to the VendorRegions table.
I am using Entity Framework, C # and MVC 3.
Here is my controller code:
public class VendorsController : Controller { readonly IVendorsRepository _vendorsRepository; readonly IRegionsRepository _regionsRepository; public VendorsController() { _vendorsRepository = new SqlVendorsRepository(); _regionsRepository = new SqlRegionsRepository(); } [HttpPost] public ActionResult Create(VendorViewModel viewModel, string[] Regions) { var vendor = new Vendor(); TryUpdateModel(vendor); if (ModelState.IsValid) { vendor.Regions.Clear(); foreach (var regionId in Regions) { vendor.Regions.Add(_regionsRepository.GetRegion(Int32.Parse(regionId))); } _vendorsRepository.SaveVendor(vendor); return RedirectToAction("Index"); } return View(viewModel);
Here is my Vendors repository code:
public class SqlVendorsRepository : IVendorsRepository { private readonly MyDBEntities _entities; public SqlVendorsRepository() { _entities = new MyDBEntities(); } public void SaveVendor(Vendor vendor) {
The error occurs when I try to save my provider in _entities.Vendors.Context.AddObject("Vendors", vendor); . And just in case, here is my region repository code:
public class SqlRegionsRepository : IRegionsRepository { private readonly MyDBEntities _entities; public SqlRegionsRepository() { _entities = new MyDBEntities(); } public IQueryable<Region> Regions { get { return _entities.Regions.AsQueryable(); } } public Region GetRegion(int id) { return Regions.FirstOrDefault(st => st.RegionID == id); } }
This seems like a simple thing, but I don't know how to get through this error. Any ideas?