2012-03-21 47 views
1

我正在編寫需要清理完成時創建的實體的測試代碼。爲了說明測試過早結束的可能性,我也在初始化測試時運行清理代碼。刪除可能或不可能存在的實體框架實體

我使用這個建議

https://stackoverflow.com/a/5522422/141172

var category = new Category() { CategoryId = 1 }; 
context.Categories.Attach(category); 
context.Categories.Remove(category); 
context.SaveChanges(); 

刪除的實體。但是,如果實體已經被刪除(如之前的測試運行成功清理),

ctx.SaveChanges(); 

拋出一個異常:

商店更新,插入或刪除語句影響了意外 行數(0)

這很有道理,但只是捕捉異常是有點尷尬。是否有一種更簡潔的方式來實現這一點,而不會引入額外的數據庫來檢查實體?

+1

當我測試這樣的,我通常只是包裝一切都在一個TransactionScope和測試結束後,我不承諾交易。這是你能做的嗎? – 2012-03-21 23:24:14

回答

2

要做到這一點,最簡單和乾淨的方法是不使用假的實體,而是運行一個簡單的SQL查詢:

var rows = context.Database.ExecuteSqlCommand("delete Category where ..."); 
if (rows == 0) 
    //nothing was deleted