2010-11-23 4 views
2

で切断されたオブジェクトを保存すると、ObjectContextの範囲外で(正しいidで)作成されたオブジェクトを更新することができませんでした。EF1のエンティティフレームワーク4

EF4に新しい方法がありますか?

コンテキストに(context.AddOrder(order))(コンテキストは、私のObjectContextのインスタンスです)を追加するだけで、 'it'はIDを持っていて、それを更新することができますか?

それはとても私のオブジェクトが代わりにAttach methodを使用EntityObject

答えて

2

から派生する非POCOです。切断されたオブジェクト用に設計されています。それはブランドの新しいオブジェクトの場合

+0

i」はn確かではない、私は新しく構築されたオブジェクトを持っています、そして、オブジェクトがエンティティキーを持っているとき 'attachメソッドはオブジェクトです' '。オブジェクトのプロパティを設定するだけで、エンティティキーがありますか? – Michel

+0

添付するコードスニペットを次に示します:context.Orders.Attach(order); context.ObjectStateManager.ChangeObjectState(order、System.Data.EntityState.Modified); order.SaveChanges(); – Devart

+0

ありがとう、トリックでした。 – Michel

5

することは、あなたはAddObjectメソッド方法はないがデータベースに存在しない、新しく作成されたオブジェクトを追加するためであるObjectContext.AddObjectまたはObjectSet.AddObject:
のいずれかを使用する必要があります。エンティティは自動的に生成されたテンポラリEntityKeyを取得し、その EntityStateはに設定され、に設定されます。 ObjectContext.AttachObjectSet.Attachが既にがデータベースに存在するエンティティのために使用される一方

。 EntityStateをAddedに設定するのではなく、Unchanged EntityStateになります。つまり、EntityStateがコンテキストにアタッチされてから変更されていません。アタッチしているオブジェクトは、データベースに存在するものとみなされます。

このトピックについての詳細は

、この記事をご覧ください:Employee Info Starter Kitから撮影
Entity Framework 4 - AddObject vs Attach

1

を、あなたは以下のようにコードスニペットを考えることができます。

public void UpdateEmployee(Employee updatedEmployee) 
     { 
      //attaching and making ready for parsistance 
      if (updatedEmployee.EntityState == EntityState.Detached) 
       _DatabaseContext.Employees.Attach(updatedEmployee); 
      _DatabaseContext.ObjectStateManager.ChangeObjectState(updatedEmployee, System.Data.EntityState.Modified); 
      _DatabaseContext.SaveChanges(); 
     } 
関連する問題