Я использую ASP.Net MVC3 и Entity Framework 4.
Сотрудник имеет OfficeLocation, который находится в другой таблице для нормализации.
У меня есть новый экран Сотрудника с раскрывающимся списком Расположение офиса:
<div class="editor-label">
@Html.LabelFor(model => model.OfficeLocation.Id, "Office Location")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.OfficeLocation.Id, new SelectList(ViewBag.OfficeLocations, "Id", "Name"))
@Html.ValidationMessageFor(model => model.OfficeLocation.Id)
</div>
Это указывает на Id, потому что у меня были проблемы с получением привязки к работе. В моем контроллере я загружаю OfficeLocation из базы данных и сохраняю его в моем новом Employee перед сохранением. Я проверил значения на данный момент, и все правильно. Я также пытался Attach () employee.OfficeLocation, без изменений. employee.OfficeLocation не имеет нулевых значений, и его состояние не изменилось.
employee.OfficeLocation = db.OfficeLocations.Single(d => d.Id == employee.OfficeLocation.Id);
db.Employees.AddObject(employee);
db.SaveChanges();
И вот тогда я получаю исключение при вставке в OfficeLocations:
Cannot insert the value NULL into column 'Name', table 'test.HR.OfficeLocations'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Я также попробовал обычный перезапуск Visual Studio, очистку сборки и так далее.
Обновление: когда я разрешил нулевые значения, я обнаружил, что он вставил в OfficeLocation строку со всеми нулевыми значениями, а затем использовал правильное значение в таблице Employee. Что.