0
我有一個用戶1 * UserGroupLinks * -1羣組表結構,創建了以下方法:實體框架保存多對多的變化
public static string SaveUser(User user, List<UserGroup> newUserGroups)
{
using (var dbContext = new DCSEntities())
{
var existingUserGroups = user.UserGroups.ToList<UserGroup>();
existingUserGroups.ForEach(d => user.UserGroups.Remove(d));
newUserGroups.ForEach(a => user.UserGroups.Add(a));
dbContext.ObjectStateManager.ChangeObjectState(user, EntityState.Modified);
dbContext.SaveChanges();
return user.UserCode;
}
}
我想刪除所有usergrouplinks該用戶,然後添加新的用戶組列表。當我運行這個方法時,我得到了UserGroups對象/ UsergroupLink表上的主鍵違例,表明我嘗試刪除現有的usergrouplinks失敗。我該如何解決這個錯誤?
所以我改變了原來的代碼來確認一個懷疑。
public static string SaveUser(User user, List<UserGroup> newUserGroups)
{
using (var dbContext = new DCSEntities())
{
User dbUser = dbContext.Users.Where(u => u.UserCode == user.UserCode).Include(ug => ug.UserGroups).Include(s => s.Status).FirstOrDefault();
var existingUserGroups = dbUser.UserGroups.ToList<UserGroup>();
existingUserGroups.ForEach(d => dbUserUserGroups.Remove(d));
newUserGroups.ForEach(a => dbContext.UserGroups.Attach(a));
newUserGroups.ForEach(a => dbUser.UserGroups.Add(a));
dbContext.ObjectStateManager.ChangeObjectState(dbUser, EntityState.Modified);
dbContext.SaveChanges();
return dbUser.UserCode;
}
}
我可以證實的是,只爲用戶添加新組時,何時該代碼工作。只要您嘗試添加現有組,就會違反主鍵。這幾乎就好像該線
existingUserGroups.ForEach(d => dbUserUserGroups.Remove(d));
沒有生效。 我下面的解決方案並不高雅,因此我沒有將其標記爲答案。
你能發佈你收到的錯誤嗎? – Dismissile
{「違反PRIMARY KEY約束'PK_Groups'。無法在對象'dbo.UserGroups'中插入重複鍵,重複鍵值爲(QA)。\ r \ n語句已終止。」} – breakerdotnet
'existingUserGroups'在'using'塊的第一行後面的項目? –