我想知道如果数据库上没有要删除的实体,为什么 BulkDelete 不抛出异常?如果有一些匹配的实体,我被迫检查数据库,并且在调用 BulkDelete 方法发送我从查询数据库中获得的匹配实体之后。EF Extensions 是否有一些自动化选项?
3 回答
已BulkDelete
针对性能进行了优化。
所以确实,首先没有检查实体是否存在,我们只是执行删除操作。
您可以做的事情是BulkRead
在使用BulkDelete
.
var customers = context.Customers.BulkRead(deserializedCustomers);
文档:https ://entityframework-extensions.net/bulk-read
通过使用这种方法,您将能够轻松地与您当前的列表进行比较,以获取数据库中不存在的客户列表。
您还可以获得 RowAffecteds 并将其与您的列表计数进行比较:https ://entityframework-extensions.net/rows-affected
您不必检查数据库。我假设您正在使用EF Extensions - BulkDelete
. 当您调用 BulkDelete 时,您只需将其删除,但要对数据库进行更改,您必须.SaveChanges();
- 但是此方法返回受影响的行数。
所以,如果数字是 0,那么你就知道你DELETE
失败了。如果数字大于0,那么你就知道DELETE
成功了
我想知道如果数据库上没有要删除的实体,为什么 BulkDelete 不抛出异常?
因为过滤器最终产生 0 结果并没有错。这本质上不是一个错误的状态。
当然,对于特定的用例,您可能希望至少能找到一些东西,但是通用库无法满足您在特定用例中的特定期望。在很多情况下,最终不删除某些内容不是问题,例如,如果有任何旧条目,则每天进行清理工作。如果没有旧条目,则不是引发异常的理由。这只是意味着不需要删除任何内容。
foreach
这与为什么 a在传递一个空集合时不抛出异常没有什么不同。仍在做它的foreach
工作,即为集合中的每个项目执行工作。有 0 个项目,因此它执行了 0 次工作。