質問

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

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

記事1
記事2

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top