让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句

前言

EF通过linq和各种扩展方法,再加上实体模型,编写数据库的访问代码确实是优美、舒服,但是生成的sql不尽如意、性能低下,尤其是复杂些的逻辑关系,最终大家还是会回归自然,选择能够友好执行sql语句的ORM,认认真真的编写sql;问题是:EF是否也能够很友好的执行sql语句?EF提供直接执行sql语句的方法并不多,而且也是极其简单的是否容易进行扩展?答案是肯定的,在DbContext下提供了Database属性就是为了执行sql用的,然后自己就通过Database下的方法属性进行了扩展(不过最后为了各种数据库的兼容性,使用了DbContext的扩展方法GetService获取相应的服务进行sql语句的执行),完成这个扩展类库的编写

扩展类库大体功能简介:

1) sql语句执行器:用于直接执行sql语句

2) EF的查询缓存器IQueryable(linq) sql语句 的查询缓存,分为本地存储 或 非本地存储(Redis)

a) 缓存存储:永久缓存(不过期) 或者 过期缓存

b) 缓存清理

3) sql配置管理器(让EFCoreMyBatis配置sql,但是通过json配置):加载与管理配置文件中的sql语句

a) sql配置执行器:用于执行配置的sql语句

b) 策略管理器:用于管理策略 策略执行器(目前分为三种策略执行器)

i. 策略管理:管理各种策略类型,用于初始化配置文件中的策略配置转换成对象

ii. 策略执行器(一般通过策略对象进行相应的处理)

1. 初始化的策略执行器

a) 配置策略对象的初始化、替换表名合并分部sql等的策略执行器

2. sql执行前的策略执行器

a) foreach策略执行器:对SqlParameter或者某些数据类型(list/dictionary/model)进行遍历生成字串替换到sql

3. sql执行时的策略执行器

a) sql与参数的日志记录策略执行器

b) 查询缓存与清理策略执行器

4) 类库的扩展与优化(因为类库中的各种类是通过DI进行管理的,因此易于扩展与优化)

a) 将查询缓存存储到Redis

b) 策略与策略执行器的扩展

c) 其他:例如反射帮助类的优化(如果有更好的实现,因为类库内部有不少实现需要通过反射)

 

源码:

githubhttps://github.com/skigs/EFCoreExtend 

引用类库:

nugethttps://www.nuget.org/packages/EFCoreExtend/ 

PM> Install-Package EFCoreExtend

查询缓存引用Redis

PM> Install-Package EFCoreExtend.Redis

类库的使用说明会分几篇文章进行详细描述,也可参考源码(源码中也有使用测试),类库目前仅支持EFCore 1.1.0,兼容性:MSSqlServersqlitemysqlPostgreSql基本都兼容(EFCore兼容的应该都可以兼容),因为刚完成不久,可能还存在一些bug或不合理的地方,望大家谅解,也请告知。

 

通过json文件配置sql

Person.json配置文件内容:

{
  //"name" :  "Person", //设置表名,如果不指定name,那么默认文件名为表名
  //配置sql:key为Sql的名称(SqlName,获取配置sql执行器的时候需要根据key获取)
  "sqls": {
    "GetList": {
      //"sql": "select name,birthday,addrid from [Person] where name=@name or id=@id",
      "sql": "select name,birthday,addrid from ##tname where name=@name or id=@id", //##tname => 表名
      "type": "query"
    }
  }
}

表的实体模型:

1     [Table(nameof(Person))]
2     public class Person
3     {
4         public int id { get; set; }
5         public string name { get; set; }
6         [Column(TypeName = "datetime")]
7         public DateTime? birthday { get; set; }
8         public int? addrid { get; set; }
9     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值