Linq to Entities:如何有效地将记录从一个表复制到另一个表?

时间:2011-02-23 17:33:07

标签: entity-framework-4 linq-to-entities

我们有一个按日期和时间组织数据的事件系统。我们经常将旧事件中的数据作为启动器复制到新事件,然后进行修改。

这就是我们在Linq所做的事情:

  • 使用.ToList()
  • 在本地获取源对象
  • 为每个项目创建一个新对象
  • 将非主键值复制到新对象并设置新主键
  • 将该对象添加到表格

这会产生大量的数据库调用。它至少包含在交易中。

这是SQL中的语句。有没有什么方法可以使Linq在没有嵌入SQL的情况下有效?

insert into targetTable (eventID, two, three, four five)
select @newEventId as eventID, two, three, four, five
from   targetTable 
where  eventid = @eventid

2 个答案:

答案 0 :(得分:2)

不,你不能使EF代码更有效率。这是EF的工作方式。如果您希望将SQL封装到存储过程中,请将存储过程映射到EF设计器并调用该SP。

如果无法创建存储过程,则直接执行SQL。您可以使用:

ObjectContext.ExecuteStoreCommand(...)

此方法仅适用于EF4。

答案 1 :(得分:1)

为了保持高效,您需要将SQL放入存储过程,然后将该存储过程添加到实体数据模型中。