場景:在同一交易內更新資料後,立即查詢驗證,但不想降低隔離等級讓其他連線看到未認可資料。
DbTrans 新增 From<T>() 方法,用法與一般查詢完全相同:
using (DbTrans trans = DbSession.Default.BeginTransaction()) {
trans.Update(Products._.ProductName, "new name", Products._.ProductID == 1);
// 交易內查詢:看得到剛剛的更新
Products p = trans.From().Where(Products._.ProductID == 1).ToFirst();
trans.Commit();
}
場景:主查詢欄位需包含相關表的聚合值(如:客戶清單含訂單筆數)。
FromSection 新增 AddSelect(FromSection subQuery, string alias):
var dt = DbSession.Default.From()
.Select(Customers._.CustomerID, Customers._.ContactName)
.AddSelect(
DbSession.Default.From()
.Select(Field.All.Count())
.Where(Customers._.CustomerID == Orders._.CustomerID),
"OrderCount") // 別名
.Page(10, 6)
.ToDataTable();
產生 SQL:
SELECT TOP 10 * FROM (
SELECT TOP 41 [Customers].[CustomerID], [Customers].[ContactName],
(SELECT COUNT(*) AS [cnt] FROM [Orders]
WHERE [Customers].[CustomerID] = [Orders].[CustomerID]) AS [OrderCount]
FROM [Customers] ORDER BY [Customers].[CustomerID] DESC
) AS tempIntable ORDER BY [CustomerID] ASC
現在可直接將 WhereClip 傳遞給原本接受 string 或 object 的方法,編譯器自動套用隱式轉換運算子,減少 .ToWhereClip() 呼叫。例如:
// 舊版
.Where(builder.ToWhereClip())
// 新版(隱式轉換)
.Where(builder) // 自動呼叫 WhereClipBuilder.op_Implicit → WhereClip
這些增強皆保持向下相容,升級即可使用。