我正在编写测试代码,需要在完成后清理它创建的实体。考虑到测试过早结束的可能性,我也在初始化测试时运行清理代码。
我正在使用此建议
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)
这很有道理,但只是抓住Exception有点尴尬。有没有更简洁的方法来实现这一点,而不引入额外的DB来检查实体?
答案 0 :(得分:2)
最简单,最干净的方法不是使用虚假实体,而是运行简单的SQL查询:
var rows = context.Database.ExecuteSqlCommand("delete Category where ...");
if (rows == 0)
//nothing was deleted