7

linq から sql への関連オブジェクトへのアクセス中に問題が発生しました。クラス Article と User があります。各記事には売り手 (ユーザー) がいて、各ユーザーには多くの記事があります。私は協会でそれを解決しました。

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

そして、これは協会です:

協会

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

ここで、記事の販売者を取得したい場合、次のエラーが発生します。

破棄されたオブジェクトにアクセスできません。オブジェクト名: 'DataContext は Dispose 後にアクセスしました。'.

エラーはセラーの取得で発生します。

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

編集: 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;
    ....
}
4

2 に答える 2

19

見つかった解決策:

DeferredLoadingEnabledDataContextを使用する場合は、プロパティをfalseに設定するだけです。

public static List<Article> Read()
{
    using (uDataContext dbx = new uDataContext())
    {
        dbx.DeferredLoadingEnabled = false;
        return dbx.Article.ToList();
    }
}
于 2013-02-04T19:19:28.410 に答える
4

DataContext を破棄しないでください。

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

于 2013-02-03T18:14:38.927 に答える