我收到錯誤消息'The operation failed:The relationship can not be changed because one or more of the foreign-key properties is non-nullable'。當使用Entity Framework 6.1時。我不明白的是爲什麼我只有一個特定的記錄。EF - 爲特定邊界案例更新多對多關係時出錯
涉及到三個表格:User,Role,UserRoles。 UserRoles具有用戶和角色的FK(鏈接表)。
EF(DB to Entities)構造了兩個實體:用戶和角色。用戶實體擁有一個集合屬性角色和角色實體擁有一個集合屬性Users。我正在嘗試更新用戶的現有角色被添加/從用戶的角色屬性中刪除。
延遲加載啓用默認爲false。以斷開的方式工作。
userWithUpdatedData被作爲參數發送到該代碼:
using (entities = new Entities())
{
try
{
var userQuery = entities.Users.AsQueryable();
userQuery = userQuery.Include(u => u.Roles);
User userInDB = (from u in userQuery
where u.id == userBDO.id
select u).FirstOrDefault();
if (userInDB == null) return false;
entities.Users.Remove(userInDB); // rowversion requirement
entities.Users.Attach(userInDB);
entities.Entry(userInDB).State = System.Data.Entity.EntityState.Modified;
userInDB.Roles.Clear(); // remove all current roles
// paint with new Roles
List<int> roleIds = new List<int>();
if (userWithUpdatedData.Roles != null)
{
foreach (Role r in userWithUpdatedData.Roles)
{
roleIds.Add(r.id);
}
}
var roles = (from r in entities.Roles
where roleIds.Contains(r.id)
select r);
foreach (Role role in roles)
{
userInDB.Roles.Add(role);
entities.Entry(role).State = EntityState.Unchanged;
}
entities.SaveChanges();
}
catch(Exception e) {}
}
對於系統中的此代碼工作正常,但用於與ID的單個用戶的所有其他用戶= 1(和與系統中的大多數活性)此代碼失敗。當我刪除更新角色用戶ID爲1的代碼更新正確(當然沒有角色)。
這段代碼有什麼問題和/或爲什麼它只會失敗一個單一的實體,併爲所有其他工作正常?
UPDATE因此,當用戶嘗試更新自我並且用戶是一個或多個角色(角色具有用戶創建/更新的FK鏈接)的作者時會發生這種情況。