2

エンティティを更新したいときに、関連するエンティティを持つエンティティを新しいコンテキストにアタッチすることに頭を悩ませようとしています。

LanguageID フィールドを持つ Person テーブル (Personnel に一般化) があります。このフィールドは、主キー (1-M) として LanguageID を持つ別のテーブル Language に EF を介して FK としてリンクされます。特定の Persons 言語設定を更新する必要がありますが、下にマークされた行で「IEntityChangeTracker の複数のインスタンスによってオブジェクトを参照できません」というエラーが表示されるため、関係は古いコンテキストにリンクされたままのようです。Personnel (Person) エンティティの関係として、Language エンティティを新しいコンテキストにアタッチする方法はありますか?

エンティティは、PreferredLanguage を返すために .Include() メソッドを使用する元の GetPersonnel() メソッドで切り離されませんでした。

PreferredLanguage は、Person テーブルの NavigationProperty 名です...

 public static void UpdateUser(Personnel originalUser, Personnel newUser )
    {
        using (AdminModel TheModel = new AdminModel())
        {

            ((IEntityWithChangeTracker)originalUser).SetChangeTracker(null);
            ((IEntityWithChangeTracker)originalUser.PreferredLanguage).SetChangeTracker(null);

            TheModel.Attach(originalUser);--Error Line
            TheModel.ApplyPropertyChanges("Person", newUser);

            TheModel.SaveChanges(); 
        }
    }

ありがとうショーン

4

1 に答える 1

1

この種の問題を回避するにGetPersonnel()は、NoTrackingクエリを実行する必要があります。

いえ

ctx.Person.MergeOption = MergeOption.NoTracking;
// and then query as per normal.

このようにして、接続されていない接続されたエンティティ ( を使用すると仮定) のグラフを取得できます.Include()。エンティティを手動でデタッチしようとすると、グラフが細分化されるため、これは機能しないことに注意してください。

お役に立てれば

アレックス

于 2009-07-24T14:20:09.987 に答える