批量插入/删除使用MapToStoredProcedures配置的EF6实体,而不重复存储过程定义

时间:2016-07-13 17:56:39

标签: c# sql-server entity-framework bulkinsert

我有一个现有的Entity Framework(6)上下文模型,实体设置映射到现有的Sql Server数据库。设置了几个具有组合键的实体,使用Fluent API调用存储过程作为标准插入/更新/删除语句的替换,如下所述:Code First Insert/Update/Delete Stored Procedures

在该页面上构建示例的简化示例:

modelBuilder  
  .Entity<BlogPost>()  
  .MapToStoredProcedures(s =>  
    s.Update(u => u.HasName("modify_blogpost")
                   .Parameter(b => b.BlogId, "blog_id")
                   .Parameter(b => b.PostId, "post_id")
                   .Parameter(b => b.Content, "content")
     .Delete(d => d.HasName("delete_blogpost")
                   .Parameter(b => b.BlogId, "blog_id")
                   .Parameter(b => b.PostId, "post_id")
     .Insert(i => i.HasName("insert_blogpost")
                   .Parameter(b => b.BlogId, "blog_id")
                   .Parameter(b => b.Content, "content")
                   .Result(b => b.PostId, "generated_post_identity")));

(请注意,我无法控制表/过程结构,并且存储过程除了正常的插入/更新/删除语句之外还可以执行一些操作)

有些情况下,我必须一次调用插入或删除100到1000个记录,并希望&#34;批处理&#34;这样的操作可以提高性能。

我知道直接批处理存储过程调用的多种方法(例如ADO.Net,StringBuilder到单个文本blob等),但我能提出的所有方法都需要复制存储过程名/参数/在另一个位置的参数。这是我想要避免的,如果可能的话

我试过了EntityFramework.Extended,但它不适用于这种情况并且似乎已经变得无效(截至2016年7月13日,最后一次提交大约是1年,有127个未解决的问题)。它不检查MapToStoredProcedures配置,因此它直接在文本命令blob中构建删除/更新语句以用于其批处理目的。在我的情况下,数据库约束/权限将导致它抛出异常。

是否存在 遵循MapToStoredProcedures配置进行批量操作的库/框架/插件?或者也许是一种使用Reflection或其他技巧来构建批量插入/删除的方法,而无需在代码中的其他位置复制存储过程映射?

0 个答案:

没有答案