使用Entity Framework更新外键

时间:2012-06-18 21:32:32

标签: c# entity-framework

我再次遇到了Entity Framework phew ....

的问题

我正在尝试使用外键更新表

我在插入方面遇到了问题,但是通过编辑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();

在更新时,我收到以下异常,

发生了参照完整性约束违规:当对象具有非临时密钥时,无法更改作为参照完整性约束一部分的属性。

任何反馈都会非常有用。

此致

Sab的

1 个答案:

答案 0 :(得分:0)

我不确定,但您可能想要检查一下在设计器中创建/更新模型时是否勾选了“在模型中包含外键列”。如果你勾选了这个,你可能会发现设置对象是不够的,你可能还需要设置Id或者只设置id。

例如。你可能需要这样做:

data.RoleId = role.RoleId;

结合设置对象或代替设置对象。

就个人而言,我没有勾选“在模型中包含外键列”,因为它引起了各种令人头疼的问题,我不记得这些问题与一年或更久以前完全不同。有时候这是一种痛苦,因为能够通过使用ID来过滤/搜索/更新是很好的,但我已经学会了在没有它的情况下生活,以避免您遇到的烦恼。