实体框架4多对多更新

时间:2010-08-31 19:27:15

标签: many-to-many entity-framework-4

我有3张桌子 -

User (Id, Name)
Roles (Id, Name)
UserRoles (UserId, RoleId)

我认为他们是自我解释的。如何更新UserRoles中的条目(UserId和RoleId)?

context.User.Roles为我提供了角色列表,但如何更新?

谢谢。

1 个答案:

答案 0 :(得分:6)

来自你的评论:

  

context.User.Roles给我列表   角色。我可以做一个for-each和   更新Id,但如何更新   相应的UserId foreach RoleId in   那张桌子?

首先,你不应该更新Id 其次,既然你正在使用EF,你应该尝试用对象(或实体)来思考,而不是“DB-many-to-many-mapping-tables”。每个User实体都有Roles的集合。如果您从Role集合中移除User.Roles并致电context.SaveChanges(),相应的条目将从UserRoles tabele中删除。同样,当您将Role对象添加到User.Roles集合并保存更改时,将在UserRoles表中创建一个新条目。
为清楚起见,以下示例可能有用:

var user = context.Users.Include("Roles").Where(u => u.Name == "User1").FirstOrDefault();
user.Roles.Remove(user.Roles.Where(r => r.Name == "Admin").FirstOrDefault());
context.SaveChanges();

(为简单起见省略了空引用检查)。