データコンテキストなしでオブジェクトを更新する方法
-
03-07-2019 - |
質問
エンティティフレームワークは、同じデータコンテキスト内のデータを更新するための優れた柔軟性を提供します
Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()
この更新機能を、「Person」のみを取得するサービスレイヤーに移動する必要がある場合リクエストで、「人」を割り当てる最適な方法は何ですか?ディープコピーを再度行わずにオブジェクトをデータコンテキストに要求しますか?
解決
エンティティオブジェクトをデータコンテキストにアタッチする必要があります。
AttachUpdetedメソッドを使用して、データコンテキスト部分クラスを拡張する必要もあります。オブジェクトをデータコンテキストにアタッチすると、更新が行われたことを認識しません。以下のコードは、すべてのプロパティが更新されており、データベースに書き込む必要があることをデータコンテキストに伝えます。
public static void Save(EntityObject entity)
{
using(MyContext ctx = new MyContext)
{
ctx.AttachUpdated(entity);
ctx.SaveChanges();
}
}
public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
if (objectDetached.EntityState == EntityState.Detached)
{
object original = null;
if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
else
throw new ObjectNotFoundException();
}
}
所属していません StackOverflow