【发布时间】: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