我試圖添加一個新的記錄,首先使用entityframework代碼的鏈接表。我所擁有的是User
和Role
上的多對多。我的情況是,當我改變了用戶的角色,我刪除所有以前的角色,並添加新的角色如下:多對多的實體框架不斷增加額外的記錄
//Delete all associated roles for user
var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId);
var usersRoles = roleUser.Roles;
usersRoles.ForEach(role => roleUser.Roles.Remove(role));
//add the new roles
roleUser.Roles.AddRange(detachedUser.Roles);
db.SaveChanges();
所以它完全刪除它們。但是,添加新角色時,不僅會將其添加到鏈接表中,還會將其添加到Role
表中。沒有RoleName
就會添加一個全新的角色。 user.Roles
將包含與下面的數據項:
RoleId;//1 <-- this Id exists in the database already but yet still it creates one instead of a linktable record.
RoleName;//null
如何防止EF從添加了一個全新的紀錄,只是添加一條記錄到鏈接表?
更新:我落得這樣做:
var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId);
var roles = db.Roles;
foreach (var role in roles)
{
if (user.Roles.Any(r => r.RoleId == role.RoleId))
{
roleUser.Roles.Add(role);
}
else
{
roleUser.Roles.Remove(role);
}
}
db.SaveChanges();
顯然它解決了,但不能理解什麼解決了它。你能否再次發佈阻止創建新角色的部分答案。 – Mounhim 2012-02-14 19:26:07