2013-02-03 20 views
6

linqからsqlへの関連オブジェクトにアクセスする際に問題があります。 私はArticleとUserのクラスを持っています。各条項には売り手(ユーザー)がおり、各ユーザーには多数の記事があります。私は協会でそれを解決しました。「廃棄オブジェクトにアクセスできない」

これは、SQLのクラスに私のLINQは、どのように見えるかです: linq to sql classes

そして、これが関連である:ここでは

association

は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 
    { 
        ... 
    } 
} 

記事の売り手を取得したいとき、次のエラーが表示されます。

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

このエラーは販売者に発生します。

これを処理する方法はありますか?

EDIT:相続人のDataContextが使用されているコード:

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

リストは、次のように使用されます。

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

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

コンテキストは、そこからデータが配置されているから来ているためです。 getを行うコードを表示する必要があります。 – spender

+0

コメントのおかげで、私はgetを行うコードを追加しました! – Nagelfar

答えて

14

ソリューション:DataContextのを使用しているとき

は単に偽で DeferredLoadingEnabledプロパティを設定します。

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

あなたのDataContextを処分しないでください。

すべてのLINQオブジェクトは、DataContextに関連付けられています。おそらく、DataContextが作成されたusingブロックの外側のオブジェクトにアクセスしているでしょう。見つかっ

関連する問題