黑白道

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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


使用方法,可以参考官方的例子,很简单,这里就不详细说明了。下面说一我使用当中碰到问题:
- 有继承关系的实体,子类无法正常使用
- 有时候批量删除生成的sql语句有错误
针对以上问题,我对源代码进行了一些修改,修改内容如下:


  MappingHelper.cs

如果当前操作的实体是有继承关系的子类,那么红框里的schema和tableName会获取不到;做了蓝框里修改后,就可以正常获取

 

  EFBatchOperation.cs

原Delete方法在操作子类时,调用_context.CreateObjectSet<T>()生成条件语句时会发生错误(没有为指定的实体类型“xxx”定义 EntitySets。如果“yyy”是派生类型,请改用基类型。参数名: TEntity),所以就重新写了一个DeleteAll方法,换成了var query = _dbContext.Set<T>().Where(_predicate);来生成条件语句,就不会出错了,当然后面的代码也做了一些相应的修改。

 

  

  SqlQueryProvider.cs

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

修改后的代码下载连接:

https://download.csdn.net/download/luleipiero/12249722

posted on 2020-03-15 00:56  黑白道  阅读(567)  评论(0编辑  收藏  举报