0

新しいオブジェクトを作成し、それを次のようなコンテキストにアタッチしたいのですが、

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

「EntityKey値がnullのオブジェクトをオブジェクトコンテキストにアタッチできません」というエラーメッセージが表示されます。データベースからユーザーオブジェクトをクエリアウトし、その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がまだ存在しているのですか?

誰でも助けることができますか?前もって感謝します!

4

2 に答える 2

3

AnEntityKeyは、Entity Frameworkがオブジェクトを一意に識別し、追跡するために使用するオブジェクトです。

新しいオブジェクトを作成する場合、エンティティの主要なプロパティはnull(または0)です。はObjectContextあなたがエンティティであることを知らず、まだ追跡していないため、エンティティキーはありません。

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

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

したがって、あなたの場合、新しいエンティティを追加するためのコードを次のように変更する必要があります。

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
于 2011-12-16T08:13:03.370 に答える
0

EntityKeyクラスは、エンティティの一意の識別子と考えてください。Contextは、変更の追跡、マージオプションなど、さまざまな操作に使用します。新しいオブジェクトのエンティティキーを指定したくない場合は、context.AttachTo( "Users"、user)を使用すると、contextがentitykeyを生成します。

于 2011-12-16T08:14:58.397 に答える