Я пытаюсь создать форму регистрации, которая использует 3 таблицы (см. Ниже).Каждому человеку присваивается одна компания (1-к-1), и каждая компания имеет несколько местоположений (1-м).Насколько я понимаю, структура моей таблицы работает, но по какой-то причине я не могу заставить Location вести себя так, как должен.Когда у меня есть 2 компании и только 1 местоположение, присвоенное компании 1, форма позволяет мне сохранять данные, несмотря на то, что ни одно местоположение не назначено компании 2. Любые идеи?
Как видно на рисунке ниже, оба поля имеютвыпадающие списки, но я надеялся, что раскрывающийся список местоположений будет зависеть от раскрывающегося списка компаний, но независимо от того, какая комбинация выбрана, варианты сохраняются.
Таблица Person:
public class Person
{
public int PersonId { get; set; }
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
//Foreign Key
[Display(Name = "Company")]
public int CompanyId { get; set; }
[ForeignKey("CompanyId")]
public virtual Company Company { get; set; }
[Display(Name = "Location")]
public int? LocationId { get; set; }
public virtual Location Location { get; set; }
}
Таблица местоположения:
public class Location
{
public int LocationId { get; set; }
public string LocationName { get; set; }
public int CompanyId { get; set; }
public Company Company { get; set; }
public ICollection<Person> People { get; set; }
}
Таблица компании:
public class Company
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public ICollection<Person> People { get; set; }
public ICollection<Location> Locations { get; set; }
}
Должен ли я удалить связь с внешним ключом между Person и Location и вместо этогоделать что-то еще?
Действия контроллера:
GET
// GET: People/Create
public ActionResult Create()
{
ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "CompanyName");
ViewBag.LocationId = new SelectList(db.Locations, "LocationId", "LocationName");
return View();
}
POST
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "PersonId,PersonName, CompanyId,LocationId")] Person person)
{
if (ModelState.IsValid)
{
db.People.Add(person);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "CompanyName", person.CompanyId);
ViewBag.LocationId = new SelectList(db.Locations, "LocationId", "LocationName", person.LocationId);
return View(person);
}
ОБНОВЛЕНИЕ № 1:
значения базы данных: