3

我在看EntityFramework.Extended。它可以在数据库实体上运行 Update() 和 Delete()。像:

//delete all users where FirstName matches
context.Users.Delete(u => u.FirstName == "firstname");

但有趣的是,它不需要调用context.SaveChanges(),它直接进入数据库并删除记录。

这是一个糟糕的设计吗?我认为对实体的每一次修改都需要调用SaveChanges()才能生效并保持数据库和内存对象之间的正确关系和映射。

4

2 回答 2

5

您必须了解 SaveChanges 的作用。SaveChanges 提交存储在当前本地缓存中的对象模型更改。

您所指的库生成 SQL 命令语句,并且不修改对象上下文。因此,由于对象上下文没有改变,所以没有要保存的更改(换句话说,SaveChanges 指的是数据模型,而不是数据库)。

为了说明这一点……想象一下您的孩子乘公共汽车上学和您送他们下学之间的区别。

当他们乘公共汽车去学校时,校车会绕到各个站点,然后当它结束时,公共汽车会立即将所有孩子都送走。这有点像调用 SaveChanges。

但是当你带你的孩子去学校时,这是一个单一的任务,在你做的时候,一个动作就可以完成。

于 2012-12-10T05:30:32.620 回答
1

这在自述文件中进行了解释。https://github.com/loresoft/EntityFramework.Extended。如果您知道要删除的内容并且需要删除多个实体,那么只需转到数据库并删除它们而不是将它们带到上下文中来删除它们会更快。这就像使用 ExecuteSqlCommand 执行 SQL 命令,但在这里看不到 SQL。另一方面,如果您的上下文正在跟踪您正在删除/更新的实体,您很可能最终会看到一些异常,因此您需要知道您在做什么、为什么要这样做以及何时这样做。

于 2012-12-10T01:11:45.107 回答