У меня есть форма ASP.Net MVC «Создать нового сотрудника».
Мой сложный объект - Сотрудник , а Сотрудник имеет Адрес , который является другим сложным объектом.
В моем представлении / форме я собираю все необходимые значения как для сотрудника, так и для адреса.
Я использую связанные помощники HTML, такие как:
Html.TextBoxFor(model => model.EmployeeAddress.StreetName)
И
Html.TextBoxFor(model => model.NewEmployee.FirstName)
и т.д.
Все это прекрасно работает. Привязка модели работает как мечта, проверка как на стороне сервера, так и на стороне клиента с использованием DataAnnotations работает прекрасно, и я приятно получаю заполненные сложные объекты, как и ожидалось в контроллере.
Теперь я пытаюсь сохранить ..
- Сотрудник должен всегда создаваться заново, потому что это форма «Добавить нового сотрудника».
- Но иногда адрес - это существующий адрес, и я не хочу вставлять другой.
- Скорее, я просто хочу связать Сотрудника с существующим AddressID того, который уже существует в базе данных.
Итак, я написал изящный метод GetExistingOrCreateNewAddress (Address PostedAddress), который прекрасно работает, поэтому я получаю правильный адрес для использования и ссылку на , который собирается сохранить объект Employee. Все это происходит в одном и том же DataContext, так что проблем нет ..
НО, даже когда я связываю , который должен быть сохранен Объект Employee с существующим адресом, при сохранении новая / пустая строка адреса создается в моей таблице адресов. Несмотря на то, что вновь созданный Сотрудник правильно связывается с существующим адресом, на который я ему указал!
Почему это так ??? И как я могу сохранить нового сотрудника без LINQ, автоматически создавая пустой адрес для меня. Поскольку я явно указываю существующий адрес, он должен быть связан вместо этого!
Вот так выглядит мой контроллер:
[HttpPost]
public ActionResult CreateEmployee(EmployeeDetailsViewModel NewEmployeeDetails)
{
if (ModelState.IsValid)
{
EmployeeRepository ER = new EmployeeeRepository();
// Fetch or Create the appropriate Address object for what has been entered
Address ActualAddress = ER.GetExistingOrCreateNewAddress(NewEmployeeDetails.EnteredAddress);
// Link this Address to the "about to be saved" Employee
NewEmployeeDetails.Employee.Address = ActualAddress;
// Lock it in..
ER.SaveNewEmployee(NewEmployeeDetails.Employee);
Я не получаю никаких ошибок!
Может кто-нибудь объяснить ??