1

Linqを使用してDBをエンティティに更新する際に問題が発生しました。

メッセージと作成者の2つのエンティティがあります。アプリケーションはWebサービスをチェックし、サービスからメッセージと作成者をプルします。

メッセージと作成者はすでにDBに存在している可能性があるため、重複をチェックします。

これは作者にとってうまく機能します。新しい作成者が追加され、既存の作成者が更新されます。

しかし、メッセージは私に奇妙な問題を与えます。メッセージは作成者と明らかな関係があるため、Message.Author=Author;を呼び出してメッセージに作成者を追加します。ここで、authorは、前の手順で作成した新しい作成者または更新された作成者です。

どうやら私がこれを行うとすぐに、そして後で私のコード呼び出しの送信変更で、エンティティframework / linqは、メンションオブジェクトを呼び出さなくても、この新しいメッセージをDBに追加することを決定します。それはおそらくそれにリンクされている作者のためにそうします。

誰かが私に擬似コードまたはLinqを使用してエンティティに作成者とメッセージの両方を挿入/更新するための適切な方法を教えてもらえますか?

4

1 に答える 1

1

EF は常にオブジェクト グラフ内のすべてのエンティティを処理します。EF コンテキストにAuthorアタッチし、そのオーサー インスタンスをデタッチされたMessageインスタンスに割り当てると、EF はこれをオブジェクト グラフの新しいエンティティとして検出します。状態を変更して、エンティティが新しいものではなく既存のものであることを EF に伝える必要があります。

if (IsNewAuthor(author)) {
   context.Add(author); 
} else {
   context.Attach(author);
   context.ObjectStateManager.ChangeObjectState(author, EntityState.Modified);
}

message.Author = author;
context.ObjectStateManager.ChangeObjectState(message, EntityState.Unchanged);
context.SaveChanges();
于 2012-06-18T11:14:49.527 に答える