【发布时间】:2014-07-07 03:41:07
【问题描述】:
我使用的是 EF 6 Code First,我需要删除一个项目,然后更新实体集合中的另一个项目。如果我尝试删除一个项目,然后修改一个完全不同的项目,我会收到错误消息“ObjectStateManage 中已存在具有相同键的对象”这是不准确的,因为有两个对象具有完全不同的 PK ID,但是当更新发生时它抛出错误。如果我注释掉要删除的代码,那么更新就可以很好地处理多个要更新的项目。为什么键不同时会抱怨“相同的键”?
foreach (var phone in phones)
{
if (!_isValidPhone(phone))
{
if(phone.PhoneId != 0)
{
var deletePhone = _db.Phones.FirstOrDefault(r => r.PhoneId == phone.PhoneId);
_db.Entry(deletePhone).State = EntityState.Deleted;
continue;
}
}
if (_isNewPhone(phone))
{
AddNewPhone(phone, _person);
}
else
{
UpdatePhoneData(phone, _person.Phones.FirstOrDefault(r => r.Order == phone.Order));
}
}
private void UpdatePhoneData(Phone phoneFrom, Phone phoneTo)
{
phoneTo.Note = phoneFrom.Note;
phoneTo.PhoneNumber = phoneFrom.PhoneNumber;
phoneTo.Order = phoneFrom.Order;
_db.Entry(phoneTo).State = EntityState.Modified;
}
【问题讨论】:
标签: entity-framework ef-code-first