.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

?
当前对象操作数据库写法和EF Core极度类似,因为现在大部分程序员都懒得去写SQL,再一个就是项目作大了或其它原因要改数据库,每次改数据库,那么写的SQL语句大部分要作调整,相当麻烦,并且写SQL时字段极容易写错,所以就出现了好多ORM框架,极大的提高了程序员的开发效率 。
接下来我们讲一下 XiaoFeng.Data.IQueryableX的用法 。
我们在上一节 数据库操作 中有讲过 ConnectionConfig 数据库连接配置对象 , 不明白的同学可以这节看 。本节继续用当前配置对象 。
建立数据库连接配置对象,FayElf.Web可为配置名称,也可以为连接串server=.;data=https://www.huyubaike.com/biancheng/testdata;uid=da;pwd=123; 后边参数为数据库驱动 。
var ConnConfig = new ConnectionConfig("FayElf.Web", DbProviderType.SqlServer);

.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

文章插图
.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

文章插图
使用 IQueryableX 可以有两种使用方式,下边模型默认就是数据库中的字段名称,也就是它们两个名称要一一对应 。如果不一样,则可以用 XiaoFeng.Column 属性去配置数据库中表字段名称,下边分别举例说明 。
通过 DataHelperX 创建一个 IQueryableX 对象 然后进行 IQueryableX 运算 去查数据库,IQueryableX和EF Core中的 IQueryable 非常类似 , 但运行效率比 IQueryable 快很多 , 并支持多数据库切换 。
1.继承了 XiaoFeng.Model.Entity 实体模型的 , 我们暂且叫A方案 , 如下边模型
/// <summary>/// 分类模型/// </summary>[Table("Category","分类", "CategoryId",ModelType.Model,"FayElf.Web",0)]public class Category : Entity<Category>{#region 构造器/// <summary>/// 无参构造器/// </summary>public Category(){}#endregion#region 属性/// <summary>/// 分类名称/// </summary>[Column(Name="Names")] public string Name { get; set; }/// <summary>/// 分类说明/// </summary>public string Description { get; set; }/// <summary>/// 分类ID/// </summary>public int CategoryId { get; set; }/// <summary>/// 父节点ID/// </summary>public int ParentId { get; set; }/// <summary>/// 添加日期/// </summary>public DateTime AddDate { get; set; }#endregion#region 方法#endregion}
.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

文章插图
.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

文章插图
2.没有继续XiaoFeng.Model.Entity实体模型的,我们暂且叫B方案 , 如下模型
/// <summary>/// 用户模型/// </summary>public class UserModel{#region 构造器/// <summary>/// 无参构造器/// </summary>public UserModel(){}#endregion#region 属性/// <summary>/// Id/// </summary>public long Id { get; set; }/// <summary>/// 帐号/// </summary>public string Account { get; set; }/// <summary>/// 密码/// </summary>public string Password { get; set; }/// <summary>/// 性别/// </summary>public int Sex { get; set; }/// <summary>/// 出生日期/// </summary>public DateTime BirthDay { get; set; }/// <summary>/// 添加日期/// </summary>public DateTime AddDate { get; set; }#endregion#region 方法#endregion}
.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

文章插图
.NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架

文章插图
首先我们先举实例讲解一下 A方案 的使用方法
//首选实例化一个 Category 实例var category = Category.Create;//查询var category1 = category.Find(a => a.CategoryId == 2);var category2 = category.Where(a => a.CategoryId == 2).ToEntity();//上边两种方式是一样的 都是提取 CategoryId 等于 2 的一条数据//列表var category3 = category.Where(a => a.CategoryId == 3).ToList();var category4 = category.ToList(a => a.CategoryId == 3);//上边两种方式是一样的 都是提取 CategoryId 等于 3 的列表数据//删除//当前语句是删除 CateogryId 等于 4 的这条记录var delete5 = category.Where(a => a.CategoryId == 4).Delete();//当前语句是删除查从库中查出来的一条数据给删除掉var delete6 = category1.Delete();//插入new Category{Name="a", ParentId=0}.Insert();//更新//当前语句是更新字段 为 Name ParentId 的字段值 条件是 CategoryId 等于 5 的记录var update5 = category.Where(a => a.CategoryId == 5).Update(a => a.Name == "aaa" && a.ParentId == 10);//当前语句是更新 字段 Name ParentId的值 数据是上边查询出来的一条记录category1.Name = "bbbb";category1.ParentId = 3;var update6 = category.Update();//联表 下边用法就是 通过 左关联 两张表 on 条件是 第一张表的 ParentId 与第二张表的 CategoryId 相同 然后字段显示为 Name,CategoryId,ParentName 的列表var join1 = category.QueryableX.Join<Category, object[]>((a, b) => new object[] { JoinType.Left, a.ParentId == b.CategoryId }).Select((a, b) => new{a.Name,a.CategoryId,ParentName = b.Name}).ToList();//更多表关联 有两种方法 第一种是 两张表关联的结果和第三张表关联,再关联的结果与第四经表关联 依次类推//第二种方法就是 假设一共有5张表关联那么直接实例化 DataHelperX时直接关联5张表,建议用第一种方法 。

推荐阅读