我可以使用 Entity Framework 4 中的 SELECT 等效项执行 INSERT
我正在将应用程序从 SqlClient 迁移到使用 SQL Server 的实体框架 4。我遇到一种情况,必须将几行从一个表复制到另一个表,因此我使用 INSERT ... SELECT 来完成此操作,如下所示:
INSERT INTO dbo.Table1 (Reg1, Reg2, Reg3, Reg4, Reg5, Reg6, Reg7, Reg8)
SELECT Reg1, Reg2, Reg3, Reg4, Reg5, @Reg6, GETDATE(), @Reg8
FROM dbo.Table2
WHERE Reg1 = @Reg1
我可以使用实体框架远程完成与此类似的操作吗?获取Table2中的所有行,并将它们逐行插入到Table1中?我该如何处理 GETDATE()?
塔克斯
I'm migrating an application from SqlClient to the Entity Framework 4, working with SQL Server. I have a situation where I have to copy several rows from one table to another, so I do it with an INSERT ... SELECT, as below:
INSERT INTO dbo.Table1 (Reg1, Reg2, Reg3, Reg4, Reg5, Reg6, Reg7, Reg8)
SELECT Reg1, Reg2, Reg3, Reg4, Reg5, @Reg6, GETDATE(), @Reg8
FROM dbo.Table2
WHERE Reg1 = @Reg1
Can I accomplish something remotely similar to this with the Entity Framework, or would I have to get all of the rows from Table2, and insert them row by row in Table1? How could I handle the GETDATE()?
Tks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将 sql 放入存储过程中,然后从您的应用程序调用该存储过程 - 我只是使用普通 sql 客户端来调用执行过程,但没有理由不能将其映射到您的 EF 模型中,如果您真的很想然后从 EF 调用它。
如果您愿意/需要,您可以让它返回一个值。
Put the sql in a stored procedure, and then call that stored procedure from your app - I'd just use plain sql client to make the call to execute the proc, but no reason you can't map it into your EF model if you really wanted to and then call it from EF.
You can have it return a value if you want/need to.
不,这在 EF 中不起作用。 EF 会将所有选定的数据从数据库加载到您的应用程序,将它们具体化为对象,并将这些对象一一插入到第二个表中。 EF 根本无法执行批处理操作。
No this will not work in EF. EF will load all selected data from DB to your application materializing them as objects and insert these objects one by one to second table. EF is unable to do batch operations at all.
如果您可以使用 EF4 的新 CTP5 功能版本,现在允许通过 SqlQuery & 执行原始 SQL 查询和命令。 DbContext.Database 上的 SqlCommand 方法。
If you can use the new CTP5 Feature release of EF4, this now allows raw SQL queries and commands to be executed via the SqlQuery & SqlCommand methods on DbContext.Database.
不,EF4 不支持批量操作。
在您的场景中,我将在您的数据库中创建一个用户定义的表类型,它模仿
dbo.Table1
表。创建一个接受该 UDT 并执行插入的存储过程:
并从常规 ADO.NET 调用该存储过程。
No, EF4 does not support bulk operations.
In your scenario, i would create a User Defined Table Type in your database, which mimics the
dbo.Table1
table.Create a stored procedure which accepts that UDT and performs the insert:
And call that from regular ADO.NET.