EF中的重复键异常

时间:2013-02-06 11:58:30

标签: c# entity-framework

这是使用EF

向sql server添加新实体的简单代码
   var isNewEntity = entity.Id == 0;

        if (isNewEntity)
        {
            _unitOfWork.Context.DbTripReportDefinitionSectionSet.Add(entity);
        }
        else
        {
            ObjectStateEntry stateEntry;
            _unitOfWork.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry);

            if (stateEntry == null)
            {
                _unitOfWork.Context.DbTripReportDefinitionSectionSet.Attach(entity);
            }

            _unitOfWork.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
        }

        _unitOfWork.Save();

        return entity.Id;

问题是我有例外

  

'ObjectStateManager中已存在具有相同键的对象。   ObjectStateManager无法跟踪具有相同对象的多个对象   键。'已存在但未跟踪实体。

因此_unitOfWork.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry);返回false并且此代码_unitOfWork.Context.DbTripReportDefinitionSectionSet.Attach(entity);抛出异常。我想因为已经附加的导航属性。如何在没有导航属性的情况下附加这些实体?或者我如何以另一种方式解决这些问题?

1 个答案:

答案 0 :(得分:0)

如果没有进一步的信息,我可能会建议您创建一个新的Context实例。

很可能你对导航属性的假设是对的;但是,除了尝试修复代码之外,最好创建一个新的context,除非有需要在同一事务中提交的操作(我假设您正在使用工作单元模式)。 / p>