2

私は再びEntity Frameworkの問題に遭遇しました....

外部キーでテーブルを更新しようとしていますが、

挿入に問題がありましたが、edmx ファイルを編集することでソートされました。

次のコードを使用して、ロール テーブルと外部関係を持つユーザー テーブルを更新しています。

Domain.Data.Role role = db.Role.FirstOrDefault(r => r.RoleName == user.Role); 

Domain.Data.User data = db.User.Where(u => u.UserName == username).First();

data.Pass = user.Password.Encrypt();
data.CreatedBy = Login.User.Encrypt();
data.DtCreated = DateTime.Now;

//data.Role = role;

 data.Role = (from r in db.Role
              where r.RoleName == user.Role
              select r).First();

 db.SaveChanges();

更新すると、次の例外が発生します。

参照整合性制約違反が発生しました: オブジェクトに非一時キーがある場合、参照整合性制約の一部であるプロパティは変更できません。

どんなフィードバックでも非常に役に立ちます。

よろしく、

サブ

4

1 に答える 1

0

よくわかりませんが、デザイナでモデルを作成/更新するときに、[モデルに外部キー列を含める]にチェックマークが付いているかどうかを確認することをお勧めします。これにチェックマークが付いている場合は、オブジェクトを設定するだけでは不十分であることがわかる場合があります。IDも設定するか、IDのみを設定する必要があります。

例えば。あなたがする必要があるかもしれません:

data.RoleId = role.RoleId;

オブジェクトの設定と組み合わせて、またはオブジェクトを設定する代わりに。

個人的には、「モデルに外部キー列を含める」にチェックマークを付けていません。これは、1年以上前のことを正確に思い出せない、あらゆる種類の頭痛の種を引き起こしたためです。Idを使用してフィルタリング/検索/更新できるのは良いことなので、時々苦痛になりますが、私はあなたが経験しているような煩わしさを避けるためにそれなしで生きることを学びました。

于 2012-06-19T01:31:18.620 に答える