一般的なリポジトリ パターンで EF5 を使用し、依存性注入に ninject を使用すると、edmx でストアド プロシージャを使用してエンティティをデータベースに更新しようとすると問題が発生します。
DbContextRepository.cs の私の更新は次のとおりです。
public override void Update(T entity)
{
if (entity == null)
throw new ArgumentException("Cannot add a null entity.");
var entry = _context.Entry<T>(entity);
if (entry.State == EntityState.Detached)
{
_context.Set<T>().Attach(entity);
entry.State = EntityState.Modified;
}
}
リポジトリに戻る AddressService.cs から、次のものがあります。
public int Save(vw_address address)
{
if (address.address_pk == 0)
{
_repo.Insert(address);
}
else
{
_repo.Update(address);
}
_repo.SaveChanges();
return address.address_pk;
}
Attach および EntityState.Modified にヒットすると、次のエラーが表示されます。
同じキーを持つオブジェクトが ObjectStateManager に既に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。
私は、スタック内およびインターネット上の多くの提案に目を通しましたが、それを解決するものは何も思いつきませんでした。任意の回避策をいただければ幸いです。
ありがとう!