2013-02-23 62 views
0

我想對我的通用存儲庫刪除方法做刪除實體集成測試。System.Data.EntityException ::「底層提供程序在打開時失敗。」在集成測試

那是我的測試方法刪除:

[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 ::」 基礎提供未能打開。」

有肯定是在訪問我的數據庫,因爲我以前做過一個外接測試,我檢查了實體插入到表中沒有任何問題。

這是什麼原因這個問題,爲什麼這個米傳送錯誤訊息?

這是我的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); 
    } 
} 

UPDATE

這是內部異常的錯誤消息:

測試「TLP.DataAccess.UnitTests.GenericRepositoryTests。刪除失敗:System.Data.EntityException:底層提供程序在打開時失敗。 ----> System.Data.SqlClient.SqlException:服務器'LISA \ SQLEXPRESS'上的MSDTC不可用。

回答

1

查看EntityException的InnerException屬性。這會給你詳細說明爲什麼打開失敗。

+0

對不起克雷格我以爲我貼上了一切。我已經使用所有信息更新了我的init問題。 – Elisabeth 2013-02-23 15:56:22

+0

前幾天我已經有這個問題:http://stackoverflow.com/questions/14989797/can-not-create-my-dbcontext-in-a-unit-test解決方案的工作,但現在我不通過一個constring或名稱到我的上下文基類,而是使用約定,這是我的上下文的完整限定類名稱,它被放在app.config文件的連接字符串的name屬性中,就像這樣: 正如我所說的,Add方法不僅適用於Delete方法,而且這與MSDTC有什麼關係? – Elisabeth 2013-02-23 16:18:28

+0

好吧googling很多,然後在單元測試中刪除我的Transactionscope解決了這個問題。我認爲在測試之前從所有數據清理表格也是可以的。這個問題可以因此關閉。 – Elisabeth 2013-02-23 16:34:46

相關問題