2009-11-05 6 views
1

글로벌 Linq를 사용하여 Sql DataContext를 사용하고 원하지 않는 삽입이 발생하면 분리 된 방법을 사용하기로 결정했습니다. 나는 나의 사업 객체에서 내 DAL에 이르는 추상 레이어 역할을하는 메소드 클래스를 통해 이것을 수행했다. 각 CRUD 호출마다 하나의 DataContext가 있으므로 이런 식으로 호출 할 수 있습니다.Linq to SQL 및 WPF : DeferredLoadingEnabled = false 및 DataBinding

using (DatabaseMethods<TEntity> db = new DatabaseMethods<TEntity>()) 
{ 
    return db.GetAll(); 
} 

데이터베이스 생성자에서 새 DataContext를 만듭니다. DatabaseMethods.Dispose()에서 컨텍스트를 삭제하고 null로 설정합니다. DatabaseMethods에서

GETALL 목록을 얻을 수있는 데이터 컨텍스트를 사용

return this.dataContext.GetTable<TEntity>().ToList(); 

나는 (그들이 유사한를 getAll 호출에 의해 채워진다) 내 콤보가 작성하는 엔티티에 결합 할 때 문제가 있지만, selectedItem가 표시되지 않습니다. (예 : Gun에는 GunType (외래 키로 연결됨)이 있지만 동일한 페이지에있는 눈금 (동일한 객체에 바인딩 됨)이 해당 항목의 텍스트를 표시하고 있습니다. WPF가 둘을 비교하는 방법을 알지 못하고 둘이 같은지 알 수 있습니까? DatabaseMethods를 테스트하는 유닛 테스트에서로드가 올바르게 발생하고 있음을 보여줍니다.

모든 DataContexts에 대해 DeferredLoadingEnabled를 해제하고로드 할 때 LoadWith 함수를 사용하여 설명자를 가져 오려고했지만 UI가 처음 가져올 때 null이어야합니다. UI가 속성을 한 번 가져 오려고 시도한 다음 두 번째로 작동하는 것으로 보입니다. 속성을 디버깅 할 때 (LoadWith 설정을 통해)로드됩니다.

이것은 매우 구체적인 문제이며 내 문제가 무엇인지 단서를 찾고 있습니다. 누구든지 몇 가지 제안 사항이 있으면 감사하게 생각합니다.

편집 : 답은 같음을 재정의하는 것입니다. 질문을 치면 그 점을 이해하는 데 도움이되었습니다. 그런 다음이 페이지를 새로 고침하고 Michael Petito의 답변을 보았습니다.

답변

2

DatabaseMethods 클래스의 각 인스턴스 내에서 다른 데이터 컨텍스트를 사용하고 있습니다. 총을 검색하는 데 사용되는 첫 번째 데이터 컨텍스트에서로드 된 GunType 인스턴스는 콤보 상자를 채우는 데 사용 된 두 번째 데이터 컨텍스트에서로드 한 해당 GunType과 다른 인스턴스가됩니다.

GunType 클래스에 의해 Object에서 상속 된 Equals 메서드를 명시 적으로 겹쳐 쓰지 않는 한 두 GunTypes는 서로 다른 인스턴스이므로 동일한 것이 아니므로 콤보 상자에서 올바른 항목을 가져올 수 없습니다.

예 : 빠른 응답

public override bool Equals(object other) 
{ 
    return other is GunType && ID == ((GunType)other).ID; 
} 
+0

감사합니다. 나는 그 결론에 이르렀습니다, 몇 분 전에이 페이지를 새로 고침하고 답을보기 전에. equals를 재정의 한 후 선택한 항목이 다시 작동합니다! – Aligned