我有3张桌子 -
User (Id, Name)
Roles (Id, Name)
UserRoles (UserId, RoleId)
我认为他们是自我解释的。如何更新UserRoles中的条目(UserId和RoleId)?
context.User.Roles
为我提供了角色列表,但如何更新?
谢谢。
答案 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();
(为简单起见省略了空引用检查)。