제조업체에 외래 키 관계가있는 제품 엔터티가 있습니다. 새 제품을 추가하는 사용자가 제조업체를 설정할지 여부는 선택 사항으로 지정하려고합니다. 내 제조업체 테이블에서 내가 가진보기,Modelbinder는 외국 관계를 불필요하게 만듭니다. 어떻게 해결할 수 있습니까?
<%= 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와 이름 열에서
. 이름은 NOT NULL로 설정됩니다. 각 제품에는 ManufacturerID가 있으며 NULL 일 수 있습니다. Manufacturer.ID < => Product.ManufacturerID에서 FK 관계를 추가했습니다.
또한 모델 메타 데이터로 DefaultValue 데이터 주석을 사용하여 Product.ManufacturerID의 기본값을 null로 설정했습니다.
제품을 만들 때 일부 제조업체를 지정하면 올바르게 작동합니다. 그러나 비워두면 ID가 데이터베이스의 Product.ManufacturerID에 할당되지만 해당 ID로 제조업체가 생성되지 않습니다. 디버거에서 Product.Manufacturer.Name이 null이지만 Product.Manufacturer.ID 및 Product.ManufacturerID가 0 (null이 아님)으로 설정된 이유가 무엇인지 보여줍니다. 제조업체를 지정하지 않으면 Product.ManufacturerID를 null로 남겨 두도록하려면 어떻게해야합니까?
public ActionResult Create(Product product, Manufacturer manufacturer) {
// ...
}
내가 모델 바인더에 너무 많이 의존 추측은 좋은 생각이 아니다, 제조 업체 엔티티를 분리하고이 같은 조치 모양을 가지고 더 좋은 생각이 될 것입니다.