Năm ngoái, Scott Guthrie stated “Bạn thực sự có thể ghi đè lên SQL thô mà LINQ to SQL sử dụng nếu bạn muốn kiểm soát tuyệt đối đối với SQL được thực hiện”, nhưng tôi không thể tìm thấy tài liệu mô tả phương pháp mở rộng.Làm cách nào để bạn mở rộng LINQ to SQL?
Tôi muốn thay đổi LINQ sau đây để truy vấn SQL:
using (NorthwindContext northwind = new NorthwindContext()) { var q = from row in northwind.Customers let orderCount = row.Orders.Count() select new { row.ContactName, orderCount }; }
Những kết quả trong các TSQL sau:
SELECT [t0].[ContactName], ( SELECT COUNT(*) FROM [dbo].[Orders] AS [t1] WHERE [t1].[CustomerID] = [t0].[CustomerID] ) AS [orderCount] FROM [dbo].[Customers] AS [t0]
Để:
using (NorthwindContext northwind = new NorthwindContext()) { var q = from row in northwind.Customers.With ( TableHint.NoLock, TableHint.Index (0)) let orderCount = row.Orders.With ( TableHint.HoldLock).Count() select new { row.ContactName, orderCount }; }
nào sẽ dẫn đến TSQL sau:
SELECT [t0].[ContactName], ( SELECT COUNT(*) FROM [dbo].[Orders] AS [t1] WITH (HOLDLOCK) WHERE [t1].[CustomerID] = [t0].[CustomerID] ) AS [orderCount] FROM [dbo].[Customers] AS [t0] WITH (NOLOCK, INDEX(0))
Sử dụng:
public static Table<TEntity> With<TEntity> ( this Table<TEntity> table, params TableHint[] args) where TEntity : class { //TODO: implement return table; } public static EntitySet<TEntity> With<TEntity> ( this EntitySet<TEntity> entitySet, params TableHint[] args) where TEntity : class { //TODO: implement return entitySet; }
Và
public class TableHint { //TODO: implement public static TableHint NoLock; public static TableHint HoldLock; public static TableHint Index (int id) { return null; } public static TableHint Index (string name) { return null; } }
Sử dụng một số loại hình LINQ to SQL mở rộng, trừ this one. Bất kỳ ý tưởng?
+1 Bất kỳ cơ hội nào bạn có nguồn cho điều này? –
Tôi đã ở trong nhóm LINQ to SQL dev :) Nếu bạn muốn sửa đổi một số hoạt động cụ thể, bạn có thể sử dụng kỹ thuật được mô tả tại đây http://damieng.com/blog/2009/04/12/linq-to-sql-tips -and-tricks-2 nhưng không có cơ chế mô hình/nhà cung cấp có thể mở rộng được hỗ trợ công khai. – DamienG