gpt4 book ai didi

.net - 是否可以使用 EF4 执行高效的多行 DELETE 或 UPDATE?

转载 作者:行者123 更新时间:2023-12-04 06:40:24 24 4
gpt4 key购买 nike

我是一名仍在学习 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 对象模型 - 这最适合读取、插入、更新一个或几个对象。

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com