次のコードを使用して、my コードから収集した新しい情報でエンティティ オブジェクトを更新しています。Entity Framework 5を使用しています。
次の拡張メソッドを使用します (EF4 で使用していた再接続コードの代わりとして)。
public static void ApplyValues(this object currentObject, object sourceObject, System.Data.Entity.DbContext obj)
{
obj.Entry(currentObject).CurrentValues.SetValues(sourceObject);
}
問題は、このメソッドが呼び出されると、SetValues
メソッドがアタッチされたオブジェクトの値を変更しようとするためEntityKey
(明らかに、これを実行したくありません)、エラーがスローされることです。
ここには2つの質問があると思います:
キー値を更新しようとするのを防ぐ方法はありますか?
ObjectContext.ApplyCurrentValues()
そうでない場合、EF4 で正常に動作していたコードを複製するにはどうすればよいですか?
- - アップデート - -
EF4 で使用した以前のコードは次のとおりです。
public static System.Data.Objects.DataClasses.EntityObject ReAttach(this System.Data.Objects.ObjectContext obj, System.Data.Objects.DataClasses.EntityObject objectDetached)
{
if (objectDetached.EntityKey != null)
{
object original = null;
if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
{
objectDetached = obj.ApplyCurrentValues(objectDetached.EntityKey.EntitySetName, objectDetached);
return objectDetached;
}
else
{
throw new ObjectNotFoundException();
}
}
else
{
return objectDetached;
}
}