我正在实现一个导入例程,其中用户将特定的格式化字符串粘贴到输入字段中,然后将输入字段转换为实体,然后放入数据库。不能“添加或更新”实体,因为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