これは、EFを使用してSQLサーバーに新しいエンティティを追加する簡単なコードです
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);
は例外をスローします。既に添付されているナビゲーション プロパティのせいだと思います。これらのエンティティをナビゲーション プロパティなしでアタッチするにはどうすればよいですか? または、これらの問題を別の方法で解決するにはどうすればよいですか?