对 EF Core 进行扩展使支持批量操作/复杂查询
EF Core 的问题一言难尽,然后有了各种插件,批量插入扩展,批量更新扩展,查询扩展。。。然后一个项目引入一堆扩展
解决此问题
<u>安装 nuget 包:CRL.EFCore.Extensions</u>
<u>using CRL;</u><u>using CRL.EFCore.Extensions;</u>
实现数据批量操作
配置实体映射,调用 ConfigEntityTypeBuilder 扩展方法
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var e = modelBuilder.Entity<TestClass>();
e.ToTable("TestClass", "dbo");
e.HasKey(b => b.Id);
e.Property(b => b.Name).HasMaxLength(50) ;
e.ConfigEntityTypeBuilder();
base.OnModelCreating(modelBuilder);
}
复制代码
获取 DbContext 的 IDbConnection dbConnection
通过扩展方法 GetDBExtend 获取 IAbsDBExtend 对象
public IAbsDBExtend GetDBExtend()
{
return dbConnection.GetDBExtend(dbTrans);
}
复制代码
使用 IAbsDBExtend 实现批量操作
var db = context.GetDBExtend();
db.BatchInsert(new List<TestClass>() { new TestClass() { Id = DateTime.Now.Millisecond, Name = "ddddd" } },true);
db.Update(b => b.Id == 1, new { Number = 2 });
复制代码
IAbsDBExtend 可以实现所有数据操作,如:
批量更新
批量删除
批量插入
存储过程
表字段、索引检查
实现复杂查询
通过扩展方法**GetLambdaQuery<T>**获取 ILambdaQuery 对象
public ILambdaQuery<T> GetLambdaQuery<T>() where T : class
{
return dbConnection.GetLambdaQuery<T>(dbTrans);
}
复制代码
使用 ILambdaQuery 实现查询
var query = context.GetLambdaQuery<TestClass>();
query.Join<TestClass2>((a, b) => a.Id == b.Id);
query.PrintQuery();
复制代码
<u>ILambdaQuery 能实现子查询和嵌套查询,只要符合 T-SQL 语义逻辑,可以使用 ILambdaQueryResultSelect 无限叠加</u>
如:
join 后 group
join 后再 join
group 后再 join
join 一个 group 结果
join 一个 union 结果
对 union 进行 group 再 join
...
示例查询:
var q1 = GetLambdaQuery();
var q2 = q1.CreateQuery<Code.ProductData>();
q2.Where(b => b.Id > 0);
var view = q2.CreateQuery<Code.Member>().Where(b => b.Id > 0).GroupBy(b => b.Name).Select(b => new { b.Name, aa = b.Id.COUNT() });//GROUP查询
var view2 = q2.Join(view, (a, b) => a.CategoryName == b.Name).Select((a, b) => new { ss1 = a.UserId, ss2 = b.aa });//关联GROUP
q1.Join(view2, (a, b) => a.Id == b.ss1).Select((a, b) => new { a.Id, b.ss1 }).ToList();//再关联
//var result = view2.ToList();
var sql = q1.PrintQuery();
复制代码
源码示例参考Data/EFTest · hubroxxl/CRL - 码云 - 开源中国 (gitee.com)
高级的查询方法见源码示例
Data/QueryTest/test · hubroxxl/CRL - 码云 - 开源中国 (gitee.com)
评论