删除可能存在或可能不存在的实体框架实体

时间:2012-03-21 22:35:24

标签: ef-code-first

我正在编写测试代码,需要在完成后清理它创建的实体。考虑到测试过早结束的可能性,我也在初始化测试时运行清理代码。

我正在使用此建议

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来检查实体?

1 个答案:

答案 0 :(得分:2)

最简单,最干净的方法不是使用虚假实体,而是运行简单的SQL查询:

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