2

EntityFramework で Project エンティティを取得する際に問題が発生しています。Objest インスタンスが破棄されましたというエラーが表示され続けます。

下の画像に示すように、2 つのインスタンスがあります。ここに画像の説明を入力

そして、次のコードは私にエラーを与えます:

    public Project GetProjectyById(int id)
    {
        using (var context = new CoderaDBEntities())
        {
            return context.Projects.First(c => c.Id == id);
        }
    }

Project からすべてが正常に取得されますが、Project オブジェクト内の Category オブジェクト (関連付け) によって、オブジェクトが破棄されたというエラーが表示されます。どうしたの?

ありがとう!

編集: この関連付けは奇妙に見えますか?

4

1 に答える 1

5

DBContext オブジェクトが既に破棄されているときに、遅延読み込みを使用して Category 関連オブジェクトにアクセスしようとしているようです (using ステートメントでラップすると、範囲外になると破棄されます)。遅延読み込みとは、関連するエンティティがコードで要求された場合にのみ、EF が関連するエンティティを読み込むことです。

これを回避するには、Include ステートメントを使用して関連オブジェクトを明示的にロードする必要があります。

return context.Projects.Include("Category").First(c => c.Id == id);

または、以下のように厳密に型指定された方法でこれをロードすることもできますが、必ず「using System.Data.Entity;」を追加してください。' 参照

return context.Projects.Include(x => x.Category).First(c => c.Id == id);

もう 1 つの方法は、以下のように DbContext オブジェクトを using ステートメントでラップしないことで、遅延読み込みを許可することです。

  public Project GetProjectyById(int id)
    {
        var context = new CoderaDBEntities() 
        return context.Projects.First(c => c.Id == id);       
    }
于 2012-11-04T11:11:28.070 に答える