2013-09-04 3 views
0

안녕하세요 EF에 문제가 있습니다. 내 응용 프로그램에서 나는 데이터베이스에서 일부 콘텐츠를 채우기 위해 DataGrid을로드해야합니다.데이터베이스에서 레코드 중복 SaveChanges()

UserControl을 :

contenus = new List<Contenu>(); 
     contenus = sacoche.Contenus.ToList(); // i get sacoche in the parameter of the contructor 
     ContenuViewSource.Source = contenus; 
     ContenuView = (ListCollectionView)ContenuViewSource.View; 
     ContenuView.Refresh(); 

모든 것이 잘 작동,하지만 난 어떤 다른 사람을 추가 할 때 Contenus 내가 데이터베이스에 중복 레코드를 가져. 복제 된 레코드 간의 유일한 차이점은 첫 번째 레코드가 외래 키를 잃어버린다는 것입니다.

editableSacoche = SacocheDal.dbContext.Sacoches.Include("Contenus").First(i => i.SacocheID == editableSacoche.SacocheID); 
      editableSacoche.Contenus = contenus; 
      SacocheDal.dbContext.SaveChanges(); 

내가하는 모든 일이 Sacoche를 얻을 그의 Contenu 마지막 SaveChanges()를 호출이 추가됩니다 여기에

내가 내 ContenuSacoche에 추가 할 수 있습니다. problem duplicate

편집 : 여기

은 결과 난 단지 새로운 아이템을 얻기 위해 시도했지만 실패했습니다. 나는 그들이 동일한 경우에도 모든 레코드를 얻을 수 contenuAjoute

List<Contenu> contenuAjoute = contenus.Except(editableSacoche.Contenus.ToList()).ToList(); 

...

+0

'editenSacoche'의'Contenus' 키가'ContenusID'로 설정되어 있는지 확인하십시오. –

+0

귀하의 의견에 대해 자세히 알려주십시오. – 113408

+1

http://msdn.microsoft.com/en-us/magazine/dn166926.aspx –

답변

0

나는 내가 원하는 것을 달성 할 수있는 방법을 발견했다. ItemComparer을 만들고 Except을 사용하여 새 항목 만 추가합니다. 여기에 코드

class ContenuComparer : IEqualityComparer<Contenu> 
{ 
    public bool Equals(Contenu x, Contenu y) 
    { 
     if (x.ContenuID == y.ContenuID) 
      return true; 

     return false; 
    } 

    public int GetHashCode(Contenu obj) 
    { 
     return obj.ContenuID.GetHashCode(); 
    } 
} 

: 그리고 여기

는 비교 자입니다

editableSacoche = SacocheDal.dbContext.Sacoches.Include("Contenus").First(i => i.SacocheID == editableSacoche.SacocheID); 
      List<Contenu> contenuAjoute = contenus.Except(editableSacoche.Contenus.ToList(), new ContenuComparer()).ToList(); 
      foreach (Contenu c in contenuAjoute) 
      { 
       editableSacoche.Contenus.Add(c); 
      } 
      SacocheDal.dbContext.SaveChanges(); 

것이 올바른 방법인지 지금은 안하지만 잘 작동합니다.

1

이 시도 :

editableSacoche = SacocheDal.dbContext.Sacoches.Include("Contenus").First(i => i.SacocheID == editableSacoche.SacocheID); 
editableSacoche.Contenus = null; 
      editableSacoche.ContenusID = contenus.ID; 
      SacocheDal.dbContext.SaveChanges(); 
+0

내 문제가 해결되지 않음 – 113408