在Entity Framework 4.0中批处理DB命令

Lad*_*nka 15 .net entity-framework batch-processing entity-framework-4

我目前的项目需要与外部系统进行日常同步.同步基于复杂的导入文件结构,该结构使用广泛的业务逻辑进行解析和处理.由于业务逻辑,我们决定在.NET代码中实现这一点,并重用现有的BL组件,而不是在存储过程或集成服务中编写相同的逻辑.

BL层位于EF 4.0数据访问层的顶部.当前实现过程导入批处理,将所有更改填入ObjectContext并在事务中执行SaveChanges.当我检查SQL分析器时,我看到EF将每个实体更改作为单个SQL命令执行(具有自己的往返DB的往返).此外,看起来这些命令是完全顺序执行的.所以我有多达100.000往返数据库进行初始导入,以及10.000 - 50.000往返数据库进行日常同步.

是否可以通过EF本身或某些提供商/扩展程序以某种方式批量插入/更新/删除命令?

RPM*_*984 9

不,它无法完成(是的 - 我也哭了).

EF不支持批处理操作,LINQ-SQL也有(有)同样的问题.

你有几个选择:

  1. 存储过程
  2. 经典的ADO.NET或EntitySQL
  3. 触发器

我过去选择了1和3.

这三种方法的问题在于您丢失了EF抽象,内部图(乐观并发),以及您带回原生SQL的世界.

  • 是的.EF不适用于批量工作.特别是像"导入批处理"这样的东西 - 是数据库问题,而不是ORM问题.我甚至不会使用EF,我会有一个单独的服务(例如WCF - 托管为Windows服务),其唯一的责任是在需要同步时导入这个批量数据.关注的问题.我以前的项目还要求db与我们和外部同步.我们使用Windows服务(在wcf天之前). (2认同)