.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張表,建議用第一種方法 。

推薦閱讀