此框架是Dapper的擴展,效率優於EntityFramwork,並且支持.NetFramework和.NetCore框架
支持.net framework4.5.1,.net core2.0及以上,更低版本適配如.netFramework4.0及以下請加群下載
支持Mssql,Oracle,Mysql等數據庫
應用層需要引用包Kogel.Dapper.Extension.MsSql(如果數據庫是Oracle則引用Kogel.Dapper.Extension.Oracle),Nuget上可以下載安裝。
或者使用Nuget命令添加包
Install-Package Kogel.Dapper.Extension.MsSql
-
目錄
- [LINQ2Dapper]最完整Dapper To Linq框架(一)---基礎查詢
- [LINQ2Dapper]最完整Dapper To Linq框架(二)---動態化查詢
- [LINQ2Dapper]最完整Dapper To Linq框架(三)---實體類關系映射
- [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL並行使用
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq實際執行的SQL
- [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表聯合與匿名類型返回
- [LINQ2Dapper]最完整Dapper To Linq框架(七)---倉儲模式
- [LINQ2Dapper]最完整Dapper To Linq框架(八)---導航屬性
(一)Model實體類
實體類層需要安裝Kogel.Dapper.Extension表名字段特性。[更多特性詳情請點擊]
(二)使用實例
首先添加命名空間
using Kogel.Dapper.Extension.MsSql;
可以通過數據庫連接對象點出擴展方法,例如
使用完記得釋放連接對象,可以通過using或者 conn.Dispose();
查詢
模糊查詢
查詢一個數組條件
int[] array = new int[] { 1, 2, 3 };
//使用In
var comment = conn.QuerySet<Comment>().Where(x => x.Id.In(array)).ToList();
//或者使用Contains
var comment = conn.QuerySet<Comment>().Where(x => array.Contains(x.Id)).ToList();
使用sql查詢
DynamicParameters param = new DynamicParameters();
param.Add("Id", 1);
var comment = conn.QuerySet<Comment>().Where("Id=@Id", param)
.ToList();
范圍查找
var comment = conn.QuerySet<Comment>().Where(x => x.Id.Between(1, 10)).ToList();
修改
自定義修改(修改指定字段)
int result = conn.CommandSet<Comment>()
.Where(x => x.Content == "test")
.Update(x => new Comment
{
Content = "test1"
});
新增
int result = conn.CommandSet<users>()
.Insert(new users() {
code = Guid.NewGuid().ToString(),
name = "test", createWay = 1,
createDate = DateTime.Now,
roleId = 2
});
新增返回自增Id
int result = conn.CommandSet<users>()
.InsertIdentity(new users() {
code = Guid.NewGuid().ToString(),
name = "test", createWay = 1,
createDate = DateTime.Now,
roleId = 2
});
刪除
如果想使用事務
using (var conn = new SqlConnection(mysqlConnection))
{
//必須先打開數據庫
conn.Open();
//創建事務對象
var transaction = conn.BeginTransaction();
//使用事務對象做修改
var result = conn.CommandSet<Comment>(transaction)
.Where(x => x.Id.Equals(1))
.Update(x => new Comment()
{
Content = "test"
});
//提交事務,回滾使用 transaction.Rollback();
transaction.Commit();
}
連表查詢
Join<主表,副表>(主表關聯字段,副表關聯字段)
連表查詢可以渲染成指定實體類,例如動態類型(dynamic)
翻頁查詢
多表任意聯查
3.14版本后Where函數和匿名返回類型支持比較復雜的函數判斷
例如
var comment1 = conn.QuerySet<Comment>()
.Join<Comment, News>((a, b) => a.ArticleId == b.Id)
.Where(x => x.Id.Between(80, 100)
&& x.SubTime.AddDays(-10) < DateTime.Now && x.Id > 10
&& x.Id > new QuerySet<News>(conn, new MySqlProvider()).Where(y => y.Id < 3 && x.Id<y.Id).Sum<News>(y => y.Id)
)
.From<Comment, News>()
.OrderBy<News>(x => x.Id)
.PageList(1, 1, (a, b) => new
{
test = new List<int>() { 3, 3, 1 }.FirstOrDefault(y => y == 1),
aaa = "6666" + "777",
Content = a.Content + "'test'" + b.Headlines + a.IdentityId,
bbb = new QuerySet<Comment>(conn, new MySqlProvider())
.Where(y => y.ArticleId == b.Id && y.Content.Contains("test")).Sum<Comment>(x => x.Id),
ccc = a.IdentityId,
ddd = Convert.ToInt32("(select count(1) from Comment)"),
a.Id
});
需要讀取數據庫的支持Sum和Count函數
不需要讀取數據庫的函數都支持,例如
test = new List<int>() { 3, 3, 1 }.FirstOrDefault(y => y == 1)
批量新增
int result = conn.CommandSet<Comment>().Insert(commentList);
以上操作都支持異步
3.1.8版本支持自定義導航查詢
var ContentList = conn.QuerySet<Comment>()
.ToList(x => new CommentDto()
{
Id = x.Id,
ArticleIds = x.ArticleId,
count = new QuerySet<News>(conn, new MySqlProvider()).Where(y => y.Id == x.ArticleId).Count(),
NewsList = new QuerySet<News>(conn, new MySqlProvider()).Where(y => y.Id == x.ArticleId).ToList(y => new NewsDto()
{
Id = y.Id,
Contents = y.Content
}).ToList()
});
(子屬性返回暫時不支持匿名類)
(Dto類需要繼承 IBaseEntity)
(三)擴展的一些函數處理
Kogel.Dapper支持一些基礎的sql函數

以及時間函數在不同數據庫中的處理

還有字符的轉換處理

(四)分組聚合
3.1.9.3版本后支持分組聚合查詢
var commne = conn.QuerySet<Comment>() .Where(x => x.Id > 0 && array1.Contains(x.Id) && x.Content.Replace("1", "2") == x.Content) .Where(x => x.Id.In(array1)) .GroupBy(x => new { x.ArticleId }) .Having(x => Function.Sum(x.Id) >= 5) .ToList(x => new { x.ArticleId, test1 = Function.Sum(x.Id) });
通過Function類點出函數,例如Function.Sum(字段)

更多擴展敬請期待
Kogel.Dapper還支持linq和sql同時使用
已完成更加復雜查詢條件或者連表關系,[詳情請點擊此處]。
框架開源,完整框架源碼可以去Github上下載:
https://github.com/a935368322/Kogel.Dapper.Extension
如有問題也可以加QQ群討論:
技術群 710217654
