我正在使用SQL Server将应用程序从SqlClient迁移到Entity Framework 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()?
TKS
答案 0 :(得分:2)
将sql放在存储过程中,然后从你的应用程序中调用该存储过程 - 我只是使用普通的sql客户端进行调用来执行proc,但没有理由你不能将它映射到你的EF模型,如果你真的想,然后从EF调用它。
如果您愿意/需要,可以让它返回一个值。
答案 1 :(得分:1)
不,这不适用于EF。 EF会将所有选定的数据从DB加载到您的应用程序,将它们作为对象实现,并将这些对象逐个插入到第二个表中。 EF完全是unable to do batch operations。
答案 2 :(得分:0)
如果您可以使用EF4的新CTP5功能版本,现在允许通过SqlQuery& S执行原始SQL查询和命令。 DbContext.Database上的SqlCommand方法。
答案 3 :(得分:0)
不,EF4不支持批量操作。
在您的方案中,我将在您的数据库中创建一个用户定义的表类型,它模仿dbo.Table1
表。
创建一个接受该UDT并执行插入的存储过程:
INSERT INTO dbo.Table1 (Reg1, Reg2, Reg3, Reg4, Reg5, Reg6, Reg7, Reg8)
SELECT Reg1, Reg2, Reg3, Reg4, Reg5, @Reg6, GETDATE(), @Reg8
FROM @UdtPassedIn
从常规的ADO.NET中调用它。