2009-07-24 8 views
2

エンティティを更新するときに、関連するエンティティを持つエンティティを新しいコンテキストにアタッチすることに頭を抱いています。関連するエンティティを持つエンティティを新しいエンティティフレームワークコンテキストに添付する

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

エンティティは、()

は、preferredlanguageはPersonテーブルの上にNavigationProperty名では、preferredlanguageを返すように.INCLUDE()メソッドを使用する方法... orginal GetPersonnelに切り離されていなかった

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(); 
     } 
    } 

ありがとう Sean

答えて

1

これらの問題を回避するには、GetPersonnel()NoTrackingとする必要があります。

I.e.あなたが接続されているエンティティのグラフを得ることができます

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

この方法で接続されていないことを(あなたが.Include()を使用すると仮定した場合)。エンティティを手動でデタッチしようとすると、これはうまくいかないことに注意してください。

希望これは

アレックス

を支援
関連する問題