2

私はゼロから設計した EF DataRepository パターンを持っており、EF を使用する Web アプリケーションを介して EF を操作するときにうまく機能しますが、取得するときにのみ正常に動作するシステムの WCF API バージョンを作成する任務を負っています。データ。

新しいオブジェクトを作成しようとすると (これらは Web サービス メソッド内で作成され、リクエストからシリアライズされません)、次の問題が発生します。

An entity object cannot be referenced by multiple instances of IEntityChangeTracker

以前にシステムを開発したときにこれを見たことがありますが、これは呼び出しごとに新しいコンテキストを作成していたためでした。コンテキストをHttpContext.Current.Itemsにスローすることでこれを修正しました。これは、Web アプリケーションでうまく機能します。しかし、コードを呼び出してコンテキストを取得すると、HttpContext は (予想どおり) Null になるため、コードはメソッド内の呼び出しごとに新しいコンテキストを再び生成します。

これを修正するために、サービス プロバイダーの初期化時に Context を (パラメーターとして) 送信する機能をサービス プロバイダーに与えました。次に、メソッドの開始時に Context を宣言します。これは、このメソッド内のすべての呼び出しが同じコンテキストを使用することを意味します。

しかし、私はまだ同じ問題を抱えていますか?

サンプルコード:

public MyObject DoSomething()
{
    var dbContext = new myContext();

    var foos = new FooHelper(dbContext).GetAllFoos();

    var bah = new bah();
    bah.Foo = foos.First();
    bah.title = "youre a real object";

    new bahHelper(dbContext).Create(bah);
}
4

2 に答える 2

0

コンテキストを適切に破棄して、エラーが消えるかどうかをテストしてください。

public MyObject DoSomething()
{
    using (var dbContext = new myContext())
    {
        var foos = new FooHelper(dbContext).GetAllFoos();

        var bah = new bah();
        bah.Foo = foos.First();
        bah.title = "youre a real object";

        new bahHelper(dbContext).Create(bah);
    }
}
于 2013-01-10T17:03:32.403 に答える
0

このような問題を見つけたとき、私の場合、別のコンテキストによって作成されたエンティティをモデルに入力したので、そのエンティティを無視して、その ID を使用して再度作成しました。すべてのエンティティ (ネストされたものを含む) を同じコンテキストで作成するようにしてください。

于 2013-03-02T21:43:06.907 に答える