簡介:SqlRepoEx是 .Net平臺下相容.NET Standard 2.0人一個輕型的ORM。解決了Lambda轉Sql語句這一難題,SqlRepoEx使用的是Lambda表示式,所以,對c#程式設計師來說,是非常簡單的,其語法特點與Linq to Sql極為相似。不僅實現了完整的Select、Insert、Update、Delete等語句解析器,同時,也實現了Select、where、order by等子句,這些語句與子句均支援匯出SQL語句,使得拼接複雜場景SQL語句變得輕鬆,SqlRepoEx很快其原生資料訪問與Dapper不相上下,SqlRepoEx本身支援Sql Server與MySql方言,同時通過SqlRepoEx.Normal支援非方言SQL。SqlRepoEx沒侵入性,僅通過簡單的幾個特性,就能讓類與資料庫關聯起來;
*本系列以靜態工廠為例;
*資料來源於Northwind資料庫;
*完整的程式碼見 https://github.com/AzThinker/SqlRepoEx2.0StartGuid https://gitee.com/azthinker/SqlRepoEx2.0StartGuid
五、@ 引數構建
1、對於類屬性 ,SqlRepoEx 為IInsertStatement,IUpdateStatement提供了 ParamSql()方法和 ParamSqlWithEntity()方法
(1)、 ParamSql(),是一個簡單返回引數語句的方法
var repository = MsSqlRepoFactory.Create<AzProducts>();
var resultUpdate = repository
.Update()
// 注意此處的 ParamSet 方法,此時不需要指定屬性的值
// 這為構建完全的 @ 引數 提供了方便
// 特別是在批更新時,最為方便
.ParamSet(p => p.ProductName2, p => p.CategoryID)
.Where(p => p.ProductID == p.ProductID);
Console.WriteLine(resultUpdate.ParamSql());
此句會生成
UPDATE [dbo].[Products]
SET ProductName = @ProductName2, CategoryID = @CategoryID
WHERE (([dbo].[Products].[ProductID] = @ProductID));
// 使用 Dapper 更新
AzProducts products = new AzProducts() { ProductID = 84, ProductName2 = “testvalue100”, CategoryID = 7 };
// Dapper 更新
int result = dbConnection.Execute(resultUpdate.ParamSql(), products);
(2) ParamSqlWithEntity()方法,一個返Tupe (string paramsql, TEntity entity)
var repository = MsSqlRepoFactory.Create<AzProducts>();
var resultUpdate = repository
.Update()
// 此處使用 Set 方法,並將屬值指定
.Set(p => p.ProductName2, “testvalue234”)
.Set(p => p.CategoryID, 5)
.Where(p => p.ProductID == 84);
var ret = resultUpdate.ParamSqlWithEntity();
Console.WriteLine(ret.paramsql);
此句會生成
UPDATE [dbo].[Products]
SET ProductName = @ProductName2, CategoryID = @CategoryID
WHERE (([dbo].[Products].[ProductID] = 84));
同時 Set 方法中的屬值會生在一個 AzProducts 類例項,這樣為使用 Dapper提供了方便
int result = dbConnection.Execute(ret.paramsql, ret.entity);
2、對於條件語句的 @ 引數
條件語句中,只需要使用
形如:.Where(p => p.ProductID == p.ProductID); 即可產生 WHERE (([dbo].[Products].[ProductID] = @ProductID));
參見上例 1 (1)
總結:
1、對於與Dapper結合使用,SqlRepoEx提供了兩種方式,一種是使用 SqlRepoEx.Adapter.Dapper ,採用與其他SqlRepoEx的操作一至的方式來訪問資料;二是,採用《最佳實踐之Dapper》中的方式,以SQL語句結合Dapper來操作;兩種方式可同時並存,不影響使用,具體採用哪形式,由程式設計人員自行決定。
2、 SqlRepoEx提供了以Lamdba的方式 ,其操作類似於Linq的操作,但更接近於Sql本身的語義順序
3、引數欄位的構建非常方便,減少拼接語句容易出錯問題,同時使用 Table,Column等特性,為異構提供了簡易的操作;