以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;
並且更新的方式都是使用強型別,特別好維護。
先發文跟家人出門一下,晚點補完後半段。
那麼晚要去哪裡?XD