1

我正在使用 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 无法跟踪具有相同键的多个对象。

我首先插入候选人,然后运行一些自动过程,然后调用此方法进行更新,如果更新,我会在container.SaveChanges(). 任何帮助都将受到高度重视。

4

1 回答 1

2

这里似乎已经解决了同样的问题 ObjectStateManager 中已经存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象 尝试改用

container.Entry(candidate).State = EntityState.Modified;

这:

exist = container.Candidates.FirstOrDefault(i => i.Id == candidate.Id);
if(exist != null) container.Entry(exist).CurrentValues.SetValues(candidate);
于 2012-05-10T19:56:14.150 回答