【问题标题】:Duplicate key exception in EFEF 中的重复键异常
【发布时间】:2013-02-06 20:46:24
【问题描述】:

这是使用 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); 抛出异常。我猜是因为已经附加了导航属性。如何在没有导航属性的情况下附加这些实体?或者我该如何以其他方式解决这些问题?

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

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

    您对导航属性的假设很可能是正确的;但与其尝试修复代码,不如创建一个新的context,除非有需要在同一个事务中提交的操作(我假设您正在使用工作单元模式)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2012-06-19
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      相关资源
      最近更新 更多