2010-06-07 1 views
0

투척 :IEditableCollectionView.AddNew()는 다음과 같이 DomainContext하고, 코드를 사용하여 실버 RIA의 문맥 경우 ArgumentNullException

private void AddProductButton_Click(object sender, RoutedEventArgs e) 
    { 
     var target = (Web.LocatorProduct)((IEditableCollectionView)ProductSource.DataView).AddNew(); 
     target.Locator = LocatorID; 
     target.Product = NewProduct.Text.ToUpper(); 

     ((IEditableCollectionView)ProductSource.DataView).CommitNew(); 
    } 

스택에 추가해서) AddNew() CreateIdentity (의 경우 ArgumentNullException 던지고 (a 생성 된 메소드). Product와 LocatorID는 조합하여 기본 키입니다.

EF에서 데이터베이스 제약 조건을 충족하지 않고 새 항목을 생성 할 수 없다고 생각합니까? 사용자로부터 기본 키를 가져와야하는 경우 어떻게해야합니까?

필자는 응용 프로그램의 모든 계층을 제어 할 수 있으므로 필요한 경우 데이터베이스 디자인에 대한 제안도 환영합니다.

+0

업데이트 : IEditableCollecctionView가 부적절한 것처럼 DataView를 캐스팅 한 것 같습니다. "New"개체를 만들 때 데이터베이스 제약 조건을 위반해서는 안되며,이 경우 'not null'제약 조건입니다. 내 제품 속성에 잘못된 값을 뿌리는 방법을 찾는 것과는 달리, 나는 추가하는 다른 방법을 찾고있을 것입니다. – Sprague

답변

0

좋아, 문제가 해결되었습니다. 이 인터페이스를 사용하는 이유는 포럼에서이 인터페이스를 읽었 기 때문입니다. DataView는 결과를 얻기 위해 인터페이스 캐스트없이 DataView를 쉽게 사용할 수 있다는 것을 인식하지 못했습니다. DataView는 커밋 후에 데이터가 어떻게 표시되는지 (일시적 일 수 있음)보기이며 더 구체적으로 보겠습니다. 말 그대로 시각적 통제에 관한 것이다. 코드 변경은 다음과 같습니다.

 var target = new Web.LocatorProduct() 
     { 
      Locator = LocatorID, 
      Product = NewProduct.Text.ToUpper() 
     }; 

     ProductSource.DataView.Add(target); 

매우 간단합니다.