다음과 같은 Linq to SQL 구조가 있습니다. "Article"및 "User"클래스가 있습니다. 각 조항에는 판매자 (사용자)가 있으며 각 사용자에게는 많은 조항이 있습니다. 나는 협회와 함께 그것을 해결했다.Linq를 목록의 SQL 연결 객체로 반환
그리고는 나는 모든 기사를 가져오고 목록을 반환하는 방법 읽기()를 가지고있다.
public static List<Article> Read()
{
using (DataContext dbx = new DataContext())
{
return dbx.Article.ToList();
}
}
그래서, 문제는 지금 : 내 프로그램의 아무 곳이나 목록을 사용하고 내가 article.Seller에 액세스 할 때, 나는 다음과 같은 예외 얻을 :
이가 삭제 된 개체에 액세스 할 수 없음을
좋아, 내가 목록을 반환하고 DataContext가 폐기되기 때문에 이것은 합법적 인 것처럼 보입니다. 판매자에게 액세스하려면 데이터베이스에서로드되고 폐기 된 DataContext로는 더 이상 가능하지 않습니다.
그래서 지연로드로 해결하고 DeferredLoadingEnabled 속성을 false로 설정하십시오. 판매자를로드하려면 DataLoadOptions을 사용했습니다.
좋아요, 지금까지는 한 단계 만 작동합니다. 이제는 기사에 액세스 할 수 있습니다. 판매자,하지만 그 판매자 (기사. 판매자. 기사)의 다른 기사를 얻으려면 null이됩니다. 그냥 판매자의 기사로 짐을 options.LoadWith<User>(u => u.Articles);
생각했는데 그것은 끝이 없기 때문에 가능하지도 않습니다.
기사 -> 판매자 -> 제품 -> 각 조 판매자 -> 제품 -> 다시 판매자 -> ...
나는 예외를 LoadOptions LoadWith 유형에서 허용되지사이클을 얻을 그래프.
내가 원했던 것은 첫 번째 방법처럼 올바른 연관 개체가있는 모든 기사를 가져 오는 방법입니다. 연결 개체는 항상 액세스 가능해야하지만 액세스 할 때 데이터베이스에서로드해야합니다.
모든 경우에 DataContext를 사용하면 프로그램에서 목록을 필요로하고 DataContext에서만 목록으로 작업 할 수 있습니다. 그러나 그것은 매우 힘들 것입니다.
내 프로그램의 모든 곳에서 내 Read() 메소드의 코드를 작성하지 않고 연결 객체에 액세스하는 방법을 알고 계십니까?