我想對我的通用存儲庫刪除方法做刪除實體集成測試。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不可用。
對不起克雷格我以爲我貼上了一切。我已經使用所有信息更新了我的init問題。 – Elisabeth 2013-02-23 15:56:22
前幾天我已經有這個問題: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
好吧googling很多,然後在單元測試中刪除我的Transactionscope解決了這個問題。我認爲在測試之前從所有數據清理表格也是可以的。這個問題可以因此關閉。 – Elisabeth 2013-02-23 16:34:46