【问题标题】:Linq to Entities: How to copy records from one table to another efficiently?Linq to Entities:如何有效地将记录从一个表复制到另一个表?
【发布时间】:2011-02-24 01:48:14
【问题描述】:

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

这就是我们在 Linq 中所做的:

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

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

这是 SQL 中的语句。有什么方法可以在不嵌入 SQL 的情况下让 Linq 如此高效?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    ObjectContext.ExecuteStoreCommand(...)
    

    此方法仅在 EF4 中可用。

    【讨论】:

    • 这不是问题,但我们的客户不允许我们更改他们的架构。除非您需要创建存储过程,否则这不是问题。
    • @Dr. Zim:我添加了一些替代方案。这不是很好,但如果你想要效率,那么你没有更好的选择,那就是直接调用 SQL。
    【解决方案2】:

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

    【讨论】:

    • 好主意,但我们的客户不允许我们修改底层数据库。
    • 哦,那应该包含在问题中。您现在可能只需要嵌入 SQL 并推动某人(可能是实际拥有权限的 DBA)稍后将存储的过程添加到数据库中以实现可维护性。
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多