我有3个表 -实体框架4多对多更新
User (Id, Name)
Roles (Id, Name)
UserRoles (UserId, RoleId)
我认为他们是自我解释。如何更新UserRoles中的条目(UserId和RoleId)?
context.User.Roles
给了我角色列表,但是如何更新它们?
谢谢。
我有3个表 -实体框架4多对多更新
User (Id, Name)
Roles (Id, Name)
UserRoles (UserId, RoleId)
我认为他们是自我解释。如何更新UserRoles中的条目(UserId和RoleId)?
context.User.Roles
给了我角色列表,但是如何更新它们?
谢谢。
从您的评论:
context.User.Roles给我的角色列表 。我可以做一个for-each和 更新Id,但我怎么更新 对应的UserId foreach RoleId 那个表?
首先,你不应该更新ID的。
其次,由于您使用的是EF,您应该尝试用对象(或实体)的方式来思考,而不是“DB-many-to-many-mapping-tables”。每个User
实体都有一个Roles
的集合。如果您从User.Roles
集合中删除Role
并呼叫context.SaveChanges()
,则相应的条目将从UserRoles
表中删除。同样,将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();
(为简单起见省略空引用检查)。
谢谢你的回答。我知道我必须从连接表中完全删除记录并添加一个新记录,而不是尝试更新现有记录。另外,我需要将UserId和RoleId作为连接表中的组合键才能工作。 – tempid 2010-09-02 13:16:07
这里有类似的问题:http://stackoverflow.com/questions/1732609/how-do-i-create-and-update-a-many-to-many-relationship-with-ef – Yakimych 2010-08-31 19:31:05
链接表示“加载所需的对象,设置更改的属性并在上下文中调用SaveChanges。” context.User.Roles给了我角色列表。我可以做一个for-each并更新Id,但是如何更新该表中对应的UserId foreach RoleId? – tempid 2010-08-31 19:48:19
有人吗?这真让我抓狂。 – tempid 2010-08-31 21:18:48