2012-03-21 3 views
1

Я пишу тестовый код, который должен очистить созданные им объекты. Чтобы учесть, что тест закончился досрочно, я запускаю код очистки, когда тест также инициализируется.Удалить объект Entity Framework, который может или не может существовать

Я использую эту рекомендацию

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 и на в конце теста я не совершаю транзакцию. Это что-то, что вы могли бы сделать? –

ответ

2

Самый простой и чистый способ сделать это, чтобы не использовать поддельный объект, но запустить простой SQL-запрос:

var rows = context.Database.ExecuteSqlCommand("delete Category where ..."); 
if (rows == 0) 
    //nothing was deleted 
Смежные вопросы