2013-02-03 12 views
6

Ich habe ein Problem beim Zugriff auf ein Verknüpfungsobjekt von LINQ zu SQL. Ich habe eine Klasse Artikel und Benutzer. Jeder Artikel hat einen Verkäufer (welcher ein Benutzer ist) und jeder Benutzer hat viele Artikel. Ich habe das mit einer Assoziation gelöst."Kann auf ein entsorgtes Objekt nicht zugreifen"

Dies ist, wie meine LINQ to SQL-Klassen wie folgt aussieht: linq to sql classes

Und der Verein ist:

association

Hier ist der Code hinter dem 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 
    { 
        ... 
    } 
} 

Jetzt, wenn ich den Verkäufer eines Artikels erhalten möchte, bekomme ich den folgenden Fehler:

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

Der Fehler tritt beim Verkäufer auf.

Irgendwelche Ideen, wie man damit umgeht?

EDIT: Heres' der Code, in dem Datacontext verwendet wird:

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

Die Liste wie folgt verwendet wird:

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

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

Es ist, weil der Kontext, aus dem die Daten stammen angeordnet ist. Sie müssen den Code anzeigen, der den get ausführt. – spender

+0

Vielen Dank für die Kommentare, ich habe den Code hinzugefügt, der das Get! – Nagelfar

Antwort

14

Lösung gefunden:

Setzen Sie einfach die DeferredLoadingEnabled Eigenschaft auf falsch, wenn die Datacontext mit:

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

Sie Ihre Datacontext nicht entsorgen.

Alle LINQ-Objekte sind einem DataContext zugeordnet. Wahrscheinlich greifen Sie auf das Objekt außerhalb des Blocks using zu, in dem der DataContext erstellt wird.

Verwandte Themen