2012-03-21 12 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(); 

は、例外がスローされます:

ストアUPDATE、INSERT、またはステートメントを削除するには、行の予期せぬ 数に影響を与えた

(0)

これは完璧な意味を持っていますが、例外をキャッチすることはちょっと面倒です。エンティティをチェックするためにDBに余分な旅行を導入することなく、これを達成するためのよりクリーンな方法がありますか?

+1

私はこのようなテストをすると、私は通常だけのTransactionScopeでとで、すべてを包みますテストの終わり、私はトランザクションをコミットしません。これはあなたができることですか? –

答えて

2

これを行う最も簡単かつクリーンな方法は、偽のエンティティを使用するように、単純なSQLクエリを実行することではありません。

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