这是使用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);
抛出异常。我想因为已经附加的导航属性。如何在没有导航属性的情况下附加这些实体?或者我如何以另一种方式解决这些问题?
答案 0 :(得分:0)
如果没有进一步的信息,我可能会建议您创建一个新的Context
实例。
很可能你对导航属性的假设是对的;但是,除了尝试修复代码之外,最好创建一个新的context
,除非有需要在同一事务中提交的操作(我假设您正在使用工作单元模式)。 / p>