EF中出现重复键异常
本文关键字:异常 EF | 更新日期: 2023-09-27 17:57:50
以下是使用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);
抛出异常。我想是因为已经附加了导航属性。如何在没有导航属性的情况下附加这些实体?或者我如何用另一种方式解决这些问题?
如果没有更多信息,我可能会建议您创建一个新的Context
实例。
很可能您对导航属性的假设是正确的;但是,与其试图修复代码,不如创建一个新的context
,除非在同一事务中有需要提交的操作(我假设您使用的是工作单元模式)。