EntityFramework批量增删改实战

最近项目中遇到批量增删改的业务,使用传统的EF方式效率实在是低的可怕,名牌插件Z.EntityFramework.Extensions又是收费项目,只好另找其他插件,终于在github上找到了EntityFramework.Utilities。
github上有两个EntityFramework.Utilities项目:

  • RudeySH/EntityFramework.Utilities
  • MikaelEliasson/EntityFramework.Utilities
    前者修复了后者不少的问题,所以我就用了RudeySH。
    地址:https://github.com/RudeySH/EntityFramework.Utilities

使用方法,可以参考官方的例子,很简单,这里就不详细说明了。下面说一我使用当中碰到问题:

  • 有继承关系的实体,子类无法正常使用
  • 有时候批量删除生成的sql语句有错误
    针对以上问题,我对源代码进行了一些修改,修改内容如下:
    EntityFramework批量增删改实战_第1张图片
    MappingHelper.cs
    如果当前操作的实体是有继承关系的子类,那么红框里的schema和tableName会获取不到;做了蓝框里修改后,就可以正常获取
    EntityFramework批量增删改实战_第2张图片
    EFBatchOperation.cs
    原Delete方法在操作子类时,调用_context.CreateObjectSet()生成条件语句时会发生错误(没有为指定的实体类型“xxx”定义 EntitySets。如果“yyy”是派生类型,请改用基类型。参数名: TEntity),所以就重新写了一个DeleteAll方法,换成了var query = _dbContext.Set().Where(_predicate);来生成条件语句,就不会出错了,当然后面的代码也做了一些相应的修改。

EntityFramework批量增删改实战_第3张图片
EntityFramework批量增删改实战_第4张图片
SqlQueryProvider.cs

  • 不知道为什么有时候lamda表达式生成的sql语句在From关键字后面会多出一个空格(FROM [dbo].[GPipeI] AS [Extent1]),就导致原正则表达式找不到对应的schema、table、alias;进行修改后就正常了。
  • 为了配合EFBatchOperation.DeleteAll方法,新增了一个GetQueryInformation方法的重载。

修改后的代码下载连接:
https://download.csdn.net/download/luleipiero/12249722

你可能感兴趣的:(C#,c#,.net,经验分享)