У меня есть объект Product, имеющий отношение внешнего ключа к Производителю. Я хочу сделать необязательным, хочет ли пользователь, добавляющий новый продукт, указать производителя.
В моем представлении создания у меня есть,
<%= Html.LabelFor(p => p.Manufacturer.Name) %>
<%= Html.EditorFor(p => p.Manufacturer.Name) %>
В действии создания,
public ActionResult Create(Product product) {
if (product.Manufacturer != null &&
!String.IsNullOrEmpty(produnt.Manufacturer.Name) &&
!String.IsNullOrWhiteSpace(produnt.Manufacturer.Name)) {
Manufacturer manufacturer = _session.Single<Manufacturer>(m => m.Name.Equals(produnt.Manufacturer.Name));
if (manufacturer == null) {
_session.Add(product.Manufacturer);
}
product.Manufacturer = manufacturer;
}
_session.Add(product);
}
В таблице производителей у меня просто есть столбцы ID и Name. Имя установлено в NOT NULL. Каждый продукт имеет идентификатор производителя, который может быть НЕДЕЙСТВИТЕЛЕН. Я добавил отношение FK от Manufacturer.ID <=> Product.ManufacturerID.
Я также установил в качестве значения по умолчанию Product.ManufacturerID значение null, используя аннотацию данных DefaultValue с метаданными модели.
Это прекрасно работает, когда я указываю производителя при создании продукта. Но когда я оставляю это поле пустым, в базе данных назначается идентификатор для Product.ManufacturerID, но с этим идентификатором не создается производитель. Отладчик показал, что Product.Manufacturer.Name имеет значение null, но по некоторым причинам Product.Manufacturer.ID и Product.ManufacturerID установлены в 0 (не нуль). Как я могу сделать так, чтобы он оставлял Product.ManufacturerID нулевым, если не указан ни один производитель?
Было бы лучше отсоединить сущность «Производитель» и сделать действие похожим на это,
public ActionResult Create(Product product, Manufacturer manufacturer) {
// ...
}
Полагаю, слишком полагаться на связующее для моделей не очень хорошая идея.