我有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