2013-02-03 22 views
6

Mam problem podczas uzyskiwania dostępu do obiektu powiązania z linq do sql. Mam artykuł klasy i użytkownika. Każdy artykuł ma sprzedającego (który jest użytkownikiem) i każdy użytkownik ma wiele artykułów. Rozwiązałem to za pomocą skojarzenia."Nie można uzyskać dostępu do utylizowanego obiektu"

ten sposób mój LINQ do klas sql wygląda następująco: linq to sql classes

A to stowarzyszenie:

association

Oto kod za Article.Seller:

[global::System.Data.Linq.Mapping.AssociationAttribute(Name="User_Article", Storage="_Seller", ThisKey="SellerID", OtherKey="ID", IsForeignKey=true)] 
public User Seller 
{ 
    get 
    { 
     return this._Seller.Entity; 
    } 
    set 
    { 
        ... 
    } 
} 

Teraz, gdy chcę uzyskać sprzedawcę artykułu, pojawia się następujący błąd:

Cannot access a disposed object. Object name: 'DataContext accessed after Dispose.'.

Błąd pojawia się w momencie otrzymania sprzedawcy.

Jakieś pomysły, jak sobie z tym poradzić?

EDIT: Herezje kod gdzie stosowany jest DataContext:

public static List<Article> Read() 
{ 
    using (uDataContext dbx = new uDataContext()) 
    { 
     return dbx.Article.ToList(); 
    } 
} 

Lista jest używana w następujący sposób:

List<Article> articles = ArticleDALC.Read(); 

foreach (Article article in articles) 
{ 
    // Exception appears here! 
    User seller = article.Seller; 
    .... 
} 
+2

To dlatego, że kontekst, z którego pochodzi dane jest umieszczony. Będziesz musiał pokazać kod, który robi get. – spender

+0

Dzięki za komentarze, dodałem kod, który robi! – Nagelfar

Odpowiedz

14

Rozwiązanie znaleziono:

Wystarczy ustawić właściwość DeferredLoadingEnabled na false podczas korzystania z DataContext:

public static List<Article> Read() 
{ 
    using (uDataContext dbx = new uDataContext()) 
    { 
     dbx.DeferredLoadingEnabled = false; 
     return dbx.Article.ToList(); 
    } 
} 
4

Nie wyrzucać swoje DataContext.

Wszystkie obiekty LINQ są powiązane z DataContext. Prawdopodobnie uzyskujesz dostęp do obiektu poza blokiem using, w którym tworzony jest DataContext.

Powiązane problemy