iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
5
Software Development

🌊 進階學習 ADO.NET、Dapper、Entity Framework 系列 第 27

【Entity Framework搭配Dapper】對應表格類別、增、刪、改使用Entity Framework

  • 分享至 

  • xImage
  •  

需要使用SQL對應表格類別,優先使用Entity Framework

以EF Core來說,可以使用SQL跟LINQ混用,並且是IQueryable延遲SQL查詢(謎之聲 : 這功能真強大!)
兼具SQL靈活,LINQ強型別,IQueryable避免組合LINQ一次查詢大量資料情況
舉例 :

var result = context.Blogs.FromSqlRaw("手寫SQL");
if (篩選條件)
    result = result.Where(_=>條件篩選);
if (是否正序)
    result = result.OrderBy(_=>_.ID);
else
    result = result.OrderByDescending(_=>_.ID);
result = result.Take(文章數量);
return result.AsList();

增、刪、改

假如在專案當中表格欄位數不小情況,又看手寫增、刪、改SQL,還需要數欄位順序對應Index Parameter情況下應該會想撞牆吧XD

所以對規律的增、刪、改,Dapper提供Dapper.Contrib套件可以簡化Update,使用方式只需要Connection.Execute<更新類別>()就可以,但礙於精簡的實作方式,它的底層邏輯其實是將所有欄位都做更新
舉例,將會員等級升等,有表格Class結構如下

[Dapper.Contrib.Extensions.Table("User")]
public class User
{
	[Dapper.Contrib.Extensions.ExplicitKey]
	public string Id { get; set; }
	public string Gender { get; set; }
	public int Age { get; set; }
	public int Level { get; set; }
}

會變成以下SQL

update User set Gender = @Gender,Age = @Age,Level=@Level where Id = @id;

這樣有點浪費資源,而EF費了很多心思做出了屬性變動的監控,只會去更新有變動的屬性

update User set Level=@Level where Id = @id;

並且更新的方式都是使用強型別,特別好維護。


上一篇
【Entity Framework搭配Dapper】為何簡單動作優先使用EntityFramework
下一篇
【Entity Framework搭配Dapper】Connection、DbContext資源管理 Part1
系列文
🌊 進階學習 ADO.NET、Dapper、Entity Framework 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Homura
iT邦高手 1 級 ‧ 2019-10-09 16:37:24

先發文跟家人出門一下,晚點補完後半段。

那麼晚要去哪裡?XD

暐翰 iT邦大師 1 級 ‧ 2019-10-09 22:15:41 檢舉

Homura
被嫌棄這幾天都沒時間陪她,所以去吃個消夜 XD

Homura iT邦高手 1 級 ‧ 2019-10-10 22:50:59 檢舉

暐翰原來XD

我要留言

立即登入留言