0

제조업체에 외래 키 관계가있는 제품 엔터티가 있습니다. 새 제품을 추가하는 사용자가 제조업체를 설정할지 여부는 선택 사항으로 지정하려고합니다. 내 제조업체 테이블에서 내가 가진보기,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) { 
    // ... 
} 

내가 모델 바인더에 너무 많이 의존 추측은 좋은 생각이 아니다, 제조 업체 엔티티를 분리하고이 같은 조치 모양을 가지고 더 좋은 생각이 될 것입니다.

답변

0

거의 다 왔어. 당신이해야 할 일은 제품과 제조사를위한 ViewModel 세트를 만드는 것입니다. 코드를 보면 Product 클래스가 linq-to-sql 생성 클래스라고 가정합니다.

제조업체 추가 여부를 나타내는 확인란과 같은 추가 양식 항목을 추가하는 것이 좋습니다.

하지만

Product.Manufacturer.ID 및 Product.ManufacturerID 0 (NOT NULL)로 설정되어 어떤 이유로

0부터 동작하는 int에 대한 디폴트 값 (null 일 수 없습니다)입니다 예상

관련 문제