System.Data.EntityException ::“基础提供程序在打开时失败。”在集成测试中

时间:2013-02-23 12:06:43

标签: entity-framework

我正在尝试对我的通用存储库删除方法执行删除实体集成测试。

这是我的测试删除方法:

[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);
}

当我在删除(用户)后调用_context.SaveChanges时,我得到一个EntityException: 说:“System.Data.EntityException ::”底层提供程序在Open上失败。“

访问我的数据库肯定没有问题,因为我之前已经完成了Add测试,并且检查了实体是否已插入到表中。

什么可能导致此问题以及为什么会出现这种误导性错误消息?

这是我的2个存储库方法添加和删除:

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上失败。   ----&GT; System.Data.SqlClient.SqlException:服务器'LISA \ SQLEXPRESS'上的MSDTC不可用。

1 个答案:

答案 0 :(得分:1)

查看EntityException的InnerException属性。这将为您提供有关开放失败原因的详细信息。