0

一般的なリポジトリの削除メソッドで削除エンティティ統合テストを実行しようとしています。

それは私のテスト削除方法です:

[Test]
public void Delete()
{
    // Arrange
    var user = new User() { FirstName = "test", LastName = "test" };
    var repository = new GenericRepository<User>(_context);
    repository.Add(user);
    _context.SaveChanges();

    // Act
    repository.Delete(user);
    _context.SaveChanges();            

    // Assert
    var deletedUser = _context.Users.Find(user.UserId);
    Assert.Null(deletedUser);
}

Delete(user) の後に _context.SaveChanges を呼び出すと、EntityException が発生します。

以前に追加テストを行い、エンティティがテーブルに挿入されたことを確認したので、データベースへのアクセスに問題はありません。

この問題の原因と、この誤解を招くエラー メッセージが表示される理由を教えてください。

これらは、私の 2 つのリポジトリ メソッド Add と Delete です。

public void Update(T entity)
{
    DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
    if (dbEntityEntry.State == EntityState.Detached)
    {
        DbSet.Attach(entity);
    }
    dbEntityEntry.State = EntityState.Modified;
}

public void Delete(T entity)
{
    DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
    if (dbEntityEntry.State != EntityState.Deleted)
    {
        dbEntityEntry.State = EntityState.Deleted;
    }
    else
    {
        DbSet.Attach(entity);
        DbSet.Remove(entity);
    }
}

アップデート

これは、内部例外のエラー メッセージです。

テスト 'TLP.DataAccess.UnitTests.GenericRepositoryTests.Delete' が失敗しました: System.Data.EntityException : 基になるプロバイダーが Open で失敗しました。----> System.Data.SqlClient.SqlException : サーバー 'LISA\SQLEXPRESS' の MSDTC は使用できません。

4

1 に答える 1

1

EntityException の InnerException プロパティを見てください。これにより、オープンに失敗した理由の詳細が表示されます。

于 2013-02-23T14:17:37.737 に答える