.net - 是否可以使用 EF4 执行高效的多行删除或更新?

标签 .net sql entity-framework entity-framework-4

我是一名开发人员,仍在学习 EF4 的复杂性。我很清楚如何下拉对象列表并在循环中迭代删除它们,但我无法让自己编写代码来在进行大量操作时为 n 条记录执行 n 条语句(和数据库往返)更新或删除。

一个典型的例子是在删除相关父记录之前删除子记录以保持引用完整性......(是的,我默认使用软删除,但幽默一下)

在存储过程中,我只需执行 SQL,如下所示:

DELETE FROM someChildTable WHERE ForeignTableId = @keyToGo
DELETE FROM parentTable WHERE Id = @keyToGo

在 Linq To SQL 中我会这样做:

dataContext.ChildrenTable.DeleteAllOnSubmit(from c in dataContext.ChildrenTable
                                            where c.ParentTableId == keyToGo
                                            select c);
dataContext.ParentTable.DeleteOnSubmit(parentToGo);
dataContext.SubmitChanges();

在 NHibernate 中我会这样做:

nhSession.CreateQuery("delete from ChildrenTable where ParentTable.Id = :keyToGo")
                        .SetInt32("keyToGo", keyToGo)
                        .ExecuteUpdate();
nhSession.Delete(parentToGo);

我已经寻找了其中任何一个的 EF 等效项,但没有成功。 我真的必须退回到存储过程才能在 EF4 上下文中执行此操作吗? 我希望不是;请分享。

最佳答案

EF 是一个 ORM - 对象关系映射器。它非常适合将关系数据库中的行和列映射到 .NET 对象模型 - 这最适合读取、插入、更新一个或多个对象。

EF 不是被设计为处理大型操作的工具,它不是被设计和优化用于批量更新、批量删除等。这些处理得更好通过直接使用 ADO.NET 对数据库执行这些 T-SQL 命令,或者仅调用存储过程来完成工作。

因此,在这种情况下,我可能会创建一个存储过程来处理删除操作,然后将该存储过程导入到我的 EF 模型中,这样我就可以像 EntityContext 上的方法一样调用它,并让 SQL Server 完成繁重的工作.

关于.net - 是否可以使用 EF4 执行高效的多行删除或更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320773/

相关文章:

.net - 安全的数据库连接。 DAL .net 架构最佳实践

.net - SQL服务器操作系统

entity-framework - Includes 不适用于 LinqKit AsExpandable

c# - 如何在 Entity Framework 中插入/更新主从?

.net - 通过 Converter 或 ExtensionMethod 读取属性属性

.net - 为什么需要锁来实现 readonly int 属性?

PHP + MS SQL Server 字符编码

mysql - 同一列中多个值的连接语句,以逗号分隔

sql - 将 array_agg 输出转换为数组而不是字符串

c# - 如何合并两个 lambda Expression<Func>