私はこの厄介なエラーで私の経験に関連して、それは途方もなく簡単な解決策につながるの上に行くことができます追いかけ地形を指摘してみましょう。
CompanyGroupはかなりシンプルです。それは名前を持っていて、Companyオブジェクトを持っています。
私はこれを開始しました:
1 public static void Add(CompanyGroup item)
2 {
3 try
4 {
5 using (Entities scope = new Entities())
6 {
7 scope.AddToCompanyGroup(item);
8 scope.SaveChanges();
9 }
10 }
11 catch (Exception ex)
12 {
13 LogException(ex, item);
14 throw;
15 }
16 }
そして、このエラーを得た:
(IEntityWithChangeTracker)item).SetChangeTracker(null);
で私を報い:
だから、
{"An entity object cannot be referenced by multiple instances of IEntityChangeTracker."}
、私はライン6と7の間にこれを追加:
{"The object cannot be added to the ObjectStateManager because it already has an EntityKey. Use ObjectContext.Attach to attach an object that has an existing key."}
だから私は今、それが不満
scope.Attach(item);
に
scope.AddToCompanyGroup(item);
を変更:私は私の若さで日付の女の子のいくつかのように聞こえるし始め
{"An object with a temporary EntityKey value cannot be attached to an object context."}
( - 内容は決してありませんが、私は逃げます)
だから私は途中
(どちらか、動作しませんでした)エンティティキーのヌルを作った(動作しませんでした)して、新しいを作成する方法を使用し、私も、このエラーを得た:
{"The source query for this EntityCollection or EntityReference cannot be returned when the related object is in either an added state or a detached state and was not originally retrieved using the NoTracking merge option."}
解決策?
と、コア、ライン7,8を交換:
本質
CompanyGroup newcg = new CompanyGroup();
newcg.GroupName = item.GroupName;
newcg.Company = scope.Company.Where(c => c.CompanyID == item.Company.CompanyID).First();
scope.AddToCompanyGroup(newcg);
scope.SaveChanges();
、Iが「アイテム」を介して渡されたデータを取り、新たに同じ を導入し、同じタイプのオブジェクトを作成するためにそれを移動させますスコープはAddで使用されるものと同じです。
* "テンプレートを、**または参照して何か**" * - ちょうど解決することを、あなたにクレイグありがとう*別*私のためのEFの問題(それは、あなたが今私に何か助けてくれた10のEF問題ですか?)。このエラーは、エンティティが別のコンテキストにアタッチされているだけでなく、このエンティティによって参照される* any *オブジェクトが別のコンテキストにアタッチされている場合にも発生します。 –