2013-02-03 12 views
6

Ho un problema durante l'accesso a un oggetto di associazione da Linq a SQL. Ho un articolo di classe e utente. Ogni articolo ha un venditore (che è un utente) e ogni utente ha molti articoli. L'ho risolto con un'associazione."Impossibile accedere a un oggetto disposto"

Ecco come il mio classi LINQ to SQL assomiglia: linq to sql classes

E questo è l'associazione:

association

ecco il codice dietro l'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 
    { 
        ... 
    } 
} 

Ora, quando voglio ottenere il venditore di un articolo, ottengo il seguente errore:

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

L'errore si verifica nel get del venditore.

Qualche idea su come gestirlo?

EDIT: Heres' il codice in cui viene utilizzato DataContext:

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

La lista è utilizzata come segue:

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

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

E 'perché il contesto da cui i dati provengono da smaltire. Dovrai mostrare il codice che ottiene. – spender

+0

Grazie per i commenti, ho aggiunto il codice che fa ottenere! – Nagelfar

risposta

14

soluzione trovata:

È sufficiente impostare la proprietà DeferredLoadingEnabled sulla falsa quando si utilizza il DataContext:

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

Non smaltire il vostro DataContext.

Tutti gli oggetti LINQ sono associati a un DataContext. Probabilmente stai accedendo all'oggetto all'esterno del blocco using in cui viene creato DataContext.