0

我想知道如果数据库上没有要删除的实体,为什么 BulkDelete 不抛出异常?如果有一些匹配的实体,我被迫检查数据库,并且在调用 BulkDelete 方法发送我从查询数据库中获得的匹配实体之后。EF Extensions 是否有一些自动化选项?

4

3 回答 3

0

BulkDelete针对性能进行了优化。

所以确实,首先没有检查实体是否存在,我们只是执行删除操作。

您可以做的事情是BulkRead在使用BulkDelete.

var customers = context.Customers.BulkRead(deserializedCustomers);

文档:https ://entityframework-extensions.net/bulk-read

通过使用这种方法,您将能够轻松地与您当前的列表进行比较,以获取数据库中不存在的客户列表。

您还可以获得 RowAffecteds 并将其与您的列表计数进行比较:https ://entityframework-extensions.net/rows-affected

于 2021-08-13T12:08:31.113 回答
0

您不必检查数据库。我假设您正在使用EF Extensions - BulkDelete. 当您调用 BulkDelete 时,您只需将其删除,但要对数据库进行更改,您必须.SaveChanges();- 但是此方法返回受影响的行数。

所以,如果数字是 0,那么你就知道你DELETE失败了。如果数字大于0,那么你就知道DELETE成功了

于 2021-08-12T16:53:13.733 回答
-1

我想知道如果数据库上没有要删除的实体,为什么 BulkDelete 不抛出异常?

因为过滤器最终产生 0 结果并没有错。这本质上不是一个错误的状态。

当然,对于特定的用例,您可能希望至少能找到一些东西,但是通用库无法满足您在特定用例中的特定期望。在很多情况下,最终不删除某些内容不是问题,例如,如果有任何旧条目,则每天进行清理工作。如果没有旧条目,则不是引发异常的理由。这只是意味着不需要删除任何内容。

foreach这与为什么 a在传递一个空集合时不抛出异常没有什么不同。仍在做它的foreach工作,即为集合中的每个项目执行工作。有 0 个项目,因此它执行了 0 次工作。

于 2021-08-13T12:17:37.387 回答