EFCore是.NETCore团队开发的一个ORM组件,但这个组件在执行传统SQL的时候并不方便,因此BeetleX.EFCore.Extension的设计目的是让EFCore执行传统SQL更简单方便。
引用
在使用组件之前需要引用它,可以通过以下地址获取最新版本
https://www.nuget.org/packages/BeetleX.EFCore.Extension/
使用
引用组件后就可以使用,组件的操作操作都是针对EFCore的DBContext对象来进行数据库操作。
SQL sql = "select * from employees";
var employees = sql.List<Employee, NorthwindContext>();
组件提供SQL对象用来操作传统的SQL语句,以上代码是在NorthwindContext数据库上执行查询语句并返回相关信息列表。
sql = "select * from customers where country=@country";
sql += ("@country", "UK");
var customers = sql.List<Customer, NorthwindContext>();
以上是针对参数化的SQL处理,在操作上DBContext可以通过泛参传入或通过实例以变量的参数传入,通过泛参传入的好处是不用实例化DBContext。
批量更新
在EFCore更新某个条件的字段信息操作起来比较麻烦,所以组件也扩展出相关方法来解决。
var cmd = db.Customers.Update(c => c.Region == "uk").Where(c => c.Country == "UK").Execute();
以上操作是把国家是UK的所有记录Region改成uk
批量删除
同样EFCore在批条件删除上也不怎么方便,组件同样也在DBSet的基础上扩展了Delete批删除方法.
using (NorthwindContext db = new NorthwindContext())
{var cmd = db.Customers.Delete(c => c.Country == "UK");
}
以上是删除国家是UK的所有记录.
Select对象
Select对象是针对单个表的个性查询需求制定的,它可以定义查询不同的定段和条件来返回到指定的对象中。
class CustomerName
{public string CustomerID { get; set; }public string CompanyName { get; set; }
}
[Fact]Select<Customer> select = new Select<Customer>("CustomerID", "CompanyName");
select &= c => c.Country == "UK";
var items = select.List<CustomerName, NorthwindContext>();
以上是针对客户信息查询一些字段并返回到其他结构的对象列表中。
转议执行
组件封了一些返回类型,通过类型的自动转换实现SQL自动执行功能。通过转议执行可以更方便地执行一些单一性的SQL处理。
using (NorthwindContext db = new NorthwindContext())
{DBValueList<string> values = (db, "select customerid from customers");DBObjectList<CustomerName> items = (db, "select CustomerID,CompanyName from customers");DBExecute<string> id = (db, "select CompanyName from customers where CustomerID='ALFKI'");DBExecute execute = (db, "delete from customers", " delete from orders");
}
执行链跟踪
在新版中添加了执行跟踪链,可以进一步查看组件执行SQL的情况。
using (CodeTrackFactory.TrackReport("AutoExecute", CodeTrackLevel.Bussiness, null, "EFCore", "BeetleX"))
{using (NorthwindContext db = new NorthwindContext()){DBValueList<string> values = (db, "select customerid from customers");DBObjectList<CustomerName> items = (db, "select CustomerID,CompanyName from customers");DBExecute<string> id = (db, "select CompanyName from customers where CustomerID='ALFKI'");var item = db.Customers.Where(c => c.CustomerID == "AROUT").FirstOrDefault();item.Region = "GuangZhou";db.SaveChanges();}
}
Console.WriteLine(CodeTrackFactory.Activity?.GetReport());
【BeetleX通讯框架代码详解】
【WebApi示例扩展】
BeetleX
开源跨平台通讯框架(支持TLS)
轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用
https://beetlex.io
如果你想了解某方面的知识或文章可以把想法发送到
henryfan@msn.com|admin@beetlex.io