前言
這是針對dapper的一個擴展,支持lambda表達式的寫法,鏈式風格讓開發者使用起來更加優雅、直觀。現在暫時只有MsSql的擴展,也沒有實現事務的寫法,將會在后續的版本補充。
這是個人業余的開源小項目,如果大家有更好的實現方式和好的建議歡迎拍磚
本項目已經在github上開源了:Sikiro.DapperLambdaExtension.MsSql
去年寫了《整理自己的.net工具庫》,里面提供的源碼重新發布到了github並用新的項目名Sikiro.Tookits
這兩個項目都發布到Nuget上了,可以在Nuget搜索Sikiro可以全部查看到
另外該項目會用到一些表達式樹的知識,如果有興趣的朋友可以先去了解,我之前也寫過一篇簡單的文章《表達式樹的解析.》
下面是簡單的使用介紹
開始
Nuget
你可以運行以下下命令在你的項目中安裝 Sikiro.DapperLambdaExtension.MsSql。
PM> Install-Package Sikiro.DapperLambdaExtension.MsSql
SqlConnection
var con = new SqlConnection("Data Source=192.168.13.46;Initial Catalog=SkyChen;Persist Security Info=True;User ID=sa;Password=123456789");
定義User
[Table("SYS_USER")]
public class SysUser
{
/// <summary>
/// 主鍵
/// </summary>
[Key]
[Required]
[StringLength(32)]
[Display(Name = "主鍵")]
[Column("SYS_USERID")]
public string SysUserid { get; set; }
/// <summary>
/// 創建時間
/// </summary>
[Required]
[Display(Name = "創建時間")]
[Column("CREATE_DATETIME")]
public DateTime CreateDatetime { get; set; }
/// <summary>
/// 郵箱
/// </summary>
[Required]
[StringLength(32)]
[Display(Name = "郵箱")]
[Column("EMAIL")]
public string Email { get; set; }
/// <summary>
/// USER_STATUS
/// </summary>
[Required]
[Display(Name = "USER_STATUS")]
[Column("USER_STATUS")]
public int UserStatus { get; set; }
}
Insert
con.CommandSet<SysUser>().Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "chengong",
});
當不存在某條件記錄Insert
con.CommandSet<SysUser>().IfNotExists(a => a.Email == "287245177@qq.com").Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "chengong",
});
UPDATE
您可以根據某個條件把指定字段更新
con.CommandSet<SysUser>().Where(a => a.Email == "287245177@qq.com").Update(a => new SysUser { Email = "123456789@qq.com" });
也可以根據主鍵來更新整個實體字段信息
User.Email = "123456789@qq.com";
condb.CommandSet<SysUser>().Update(User);
DELETE
您可以根據條件來刪除數據
con.CommandSet<SysUser>().Where(a => a.Email == "287245177@qq.com").Delete()
QUERY
GET
獲取過濾條件的一條數據(第一條)
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").Get()
TOLIST
當然我們也可以查詢出符合條件的數據集
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").OrderBy(b => b.Email).Top(10).Select(a => a.Email).ToList();
PAGELIST
還有分頁
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com")
.OrderBy(a => a.CreateDatetime)
.Select(a => new SysUser { Email = a.Email, CreateDatetime = a.CreateDatetime, SysUserid = a.SysUserid })
.PageList(1, 10);
UPDATESELECT
先更新再把結果查詢出來
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com")
.OrderBy(a => a.CreateDatetime)
.Select(a => new SysUser { Email = a.Email })
.UpdateSelect(a => new SysUser { Email = "2530665632@qq.com" });
事務功能
con.Transaction(tc =>
{
var sysUserid = tc.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").Select(a => a.SysUserid).Get();
tc.CommandSet<SysUser>().Where(a => a.SysUserid == sysUserid).Delete();
tc.CommandSet<SysUser>().Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
Mobile = "13536059332",
RealName = "大笨貞",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "fengshuzhen",
UserStatus = 1,
UserType = 1,
Password = "asdasdad"
});
});
最后來一個完整的DEMO
using (var con = new SqlConnection("Data Source=192.168.13.46;Initial Catalog=SkyChen;Persist Security Info=True;User ID=sa;Password=123456789"))
{
con.CommandSet<SysUser>().Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "chengong",
});
var model = con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").Get();
con.CommandSet<SysUser>().Where(a => a.SysUserid == model.SysUserid)
.Update(a => new SysUser { Email = "2548987@qq.com" });
con.CommandSet<SysUser>().Where(a => a.SysUserid == model.SysUserid).Delete();
}
其他
除了簡單的CURD還有Count、Sum、Exists
結束
第一個版本有未完善的地方,如果大家有很好的建議歡迎隨時向我提,希望得到大家的建議后能良好的改善升級