我正在使用EntityFramework代码第一种方法。这是插入和更新的方法:
private void SaveCandidates(Container container, List<Candidate> candidates, bool isInsert)
{
var alreadyExists = false;
foreach (candidate matchingOrderCandidate in candidates)
{
alreadyExists = container.Candidates.Any(i => i.Id == candidate.Id);
if (!alreadyExists && isInsert)
{
container.Entry(candidate).State = EntityState.Added;
}
if (alreadyExists && !isInsert)
{
container.Entry(candidate).State = EntityState.Modified;
}
}
container.SaveChanges();
}
但是在更新的情况下,它会抛出异常
[System.InvalidOperationException] =具有相同键的对象 已经存在于ObjectStateManager中。 ObjectStateManager无法使用相同的键跟踪多个对象。
我首先插入Candidates然后进行一些自动进程运行,然后调用此方法进行更新,如果更新,我会在container.SaveChanges()
获得异常。任何帮助都会得到高度的关注。
答案 0 :(得分:2)
这里似乎已经解决了同样的问题An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key 尝试使用
container.Entry(candidate).State = EntityState.Modified;
这样:
exist = container.Candidates.FirstOrDefault(i => i.Id == candidate.Id);
if(exist != null) container.Entry(exist).CurrentValues.SetValues(candidate);