2011-12-16 2 views
0

に配置されたとき、のEntityKeyを作成し、それは私が新しいオブジェクトを作成し、このような状況にアタッチしたい

User user = new User(); 
user.userName=”Kobe”; 
context.Attach(user); 

エラーメッセージが表示されます - 「ヌルのEntityKey値を持つオブジェクトを添付することができませんオブジェクトのコンテキストに " 私は、データベースからユーザーオブジェクトを照会し、新しいオブジェクトに、それはのEntityKeyだ代入し、次にこのようなクエリの結果オブジェクトを取り外した場合は、

User user = (from u in context.Users where u.userID == 1 select u).First(); 
User newUser = new User(); 
newUser.userName = “Kobe”; 
newUser.EntityKey = user.EntityKey; 
context.Detach(user); 
context.Attach(newUser); 

別のエラーメッセージが表示されます - 「オブジェクトに値ので添付することができませんEntityKeyの一部であるプロパティがEntityKeyの対応する値と一致しません」 EntityKeyが何であるかわからないため、インターネットで検索し、MSDNのEntityKeyクラスを見たことがありますが、はっきりと理解できない。 EntityKeyが作成され、オブジェクトにアタッチされているときどこで見つけることができますか?オブジェクトを切り離すと、なぜEntityKeyがまだ存在するのですか?

誰でも手助けできますか?前もって感謝します!

答えて

3

EntityKeyは、オブジェクトを一意に識別して追跡するためにEntity Frameworkによって使用されるオブジェクトです。

新しいオブジェクトを作成する場合、エンティティのキ​​ープロパティはnull(または0)です。 ObjectContextは、エンティティが存在し、エンティティキーが存在しないため、エンティティがまだ存在していないことを認識していません。

オブジェクトをコンテキストに追加すると、一時的なキーが構築されます。 その後、データベースに変更を保存することができます。これにより、Insertステートメントが生成され、データベースから新しいキーが取得され、永続的なEntityKeyが作成され、すべての参照が一時キーに更新されます。

添付は別の話です。オブジェクトがデータベースにすでに存在し、ObjectContextへの接続がない場合、ObjectContextにエンティティをアタッチします。

だからあなたの場合には、あなたがに新しいエンティティを追加するためのコード変更する必要があります。エンティティの一意の識別子としてのEntityKeyクラスの

User user = new User(); 
user.userName=”Kobe”; 

context.Users.Add(user); // Generate a temporary EntityKey 
// Insert other objects or make changes 
context.SaveChanges(); // Generate an insert statement and update the EntityKey 
+0

非常にクール! EntityKeyに関するご意見ありがとうございます! – James

0

と思いますが。コンテキストは、変更トラッキング、マージオプションなどのさまざまな操作にそれを使用します。新しいオブジェクトにエンティティキーを指定したくない場合は、context.AttachTo( "Users"、user)およびコンテキストを使用してエンティティキーが生成されます。

関連する問題