Entity Framework CTP5コードでPOCOオブジェクトを削除しようとして問題が発生しました。Entity Framework CTP5でPOCOオブジェクトを削除しようとすると問題が発生しました
私は自分のDelete
メソッドと両方の統合テストから始めます。最初の統合テストは合格/合格、2回目は合格しません。
public class GenericRepository<T> : IRepository<T> where T : class
{
public GenericRepository(DbContext unitOfWork)
{
Context = unitOfWork;
}
...
public void Delete(T entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
if (Context.Entry(entity).State == EntityState.Detached)
{
Context.Entry(entity).State = EntityState.Deleted;
}
Context.Set<T>().Remove(entity);
}
...
}
これは、私の一般的なRepoのDeleteメソッドです。今、私の統合テストに
[OK]を.. ....
[TestMethod]
public void DirectlyDeleteAPoco()
{
// Arrange.
var poco = new Poco {PocoId = 1};
// Act.
using (new TransactionScope())
{
PocoRepository.Delete(poco);
UnitOfWork.Commit();
// Now try and reload this deleted object.
var pocoShouldNotExist =
PocoRepository.Find()
.WithId(1)
.SingleOrDefault();
Assert.IsNull(pocoShouldNotExist);
}
}
働き、これは...
[TestMethod]
public void DeleteAPocoAfterLoadingAnInstance()
{
// Arrange.
var existingPoco = PocoRepository.Find().First();
var detachedPoco = new Poco {PocoId = existingPoco.PocoId};
// Act.
using (new TransactionScope())
{
PocoRepository.Delete(detachedPoco);
UnitOfWork.Commit();
// Now try and reload this deleted object.
var pocoShouldNotExist =
PocoRepository.Find()
.WithId(existingPoco.PocoId)
.SingleOrDefault();
Assert.IsNull(pocoShouldNotExist);
}
}
この第二の一つは、次の例外をスローしません: -
System.InvalidOperationException: がすでに同じキーを持つ オブジェクトがObjに存在するectStateManager。 ObjectStateManagerは、同じキーを持つ複数のオブジェクトを で追跡することはできません。私が正しく、私はオブジェクトグラフに2つ目のポコオブジェクトを(つまり
detachedPoco
)を追加しようとしている..しかし、私は1つが既に存在していることができないので、ということを理解している場合
さて、(existingPoco
は私が事前にロードされました)。 Ok ...しかし、私はこれに気を付けるべきではないと思う。消費者として、私はこれらのObjectManagersやものについて気にしたくありません。私はちょうど私のポコのセーブ/削除をしたいです。
これらのシナリオを反映するように私の削除メソッドを変更するにはどうすればよいですか?お願いします?
こんにちはラディスラフ、あなたは添付の削除によって何を意味するか、またはエンティティを削除しますか? 両方を実装する方法 – IamStalker