9

エンティティ フレームワークは、同じデータ コンテキストでデータを更新するための優れた柔軟性を提供します

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()

この更新機能をリクエストで「Person」のみを受け取るサービスレイヤーに移動する必要がある場合、ディープコピーを再度実行せずに「Person」リクエストオブジェクトをデータコンテキストに割り当てる最良の方法は何ですか?

4

1 に答える 1

12

エンティティ オブジェクトをデータ コンテキストにアタッチする必要があります。

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

記事1
記事2

于 2008-10-02T20:39:46.813 に答える