我正在實現一個導入例程,其中用戶將特定的格式化字符串粘貼到輸入字段中,然後將輸入字段轉換爲實體,然後放入數據庫。不能「添加或更新」實體,因爲Primery密鑰不能更改
算法檢查實體是否已經存在,並嘗試更新它或將其插入到數據庫中。插入工作正常 - 更新失敗。
//considered existing if Name and owning user match.
if (db.Captains.Any(cpt => cpt.Name == captain.Name && cpt.User.Id == UserId))
{
var captainToUpdate = db.Captains.Where(cpt => cpt.Name == captain.Name && cpt.User.Id == UserId).SingleOrDefault();
db.Entry(captainToUpdate).CurrentValues.SetValues(captain);
db.Entry(captainToUpdate).State = EntityState.Modified;
await db.SaveChangesAsync();
}
眼前的問題是,這樣寫的,它會嘗試更新主鍵爲好,(captain
ID爲0,而captainToUpdate
標識已被設置),這導致異常The property 'Id' is part of the object's key information and cannot be modified.
我需要更改什麼,以便正確更新實體。如果可以避免,我不想手動更新每個屬性,因爲表隊長包含30個列。
爲什麼不在設置值之前記下鍵值。然後將鑰匙重置。 – 2014-08-28 13:04:11