去年,Scott Guthrie表示“如果您想要对执行的 SQL 进行绝对控制,您实际上可以覆盖 LINQ to SQL 使用的原始 SQL”,但我找不到描述可扩展性方法的文档。
我想修改以下 LINQ to SQL 查询:
使用 (NorthwindContext 北风 = 新 NorthwindContext ()) {
var q = from row in northwind.Customers
让 orderCount = row.Orders.Count()
选择新的{
row.ContactName,
订单数
};
}
这导致以下 TSQL:
选择 [t0].[联系人姓名], (
选择计数(*)
FROM [dbo].[订单] AS [t1]
WHERE [t1].[CustomerID] = [t0].[CustomerID]
) AS [orderCount]
FROM [dbo].[客户] AS [t0]
到:
使用 (NorthwindContext 北风 = 新 NorthwindContext ()) {
var q = from row in northwind.Customers.With (
TableHint.NoLock, TableHint.Index (0))
让 orderCount = row.Orders.With (
TableHint.HoldLock).Count()
选择新的{
row.ContactName,
订单数
};
}
这将导致以下 TSQL:
选择 [t0].[联系人姓名], (
选择计数(*)
FROM [dbo].[Orders] AS [t1] WITH (HOLDLOCK)
WHERE [t1].[CustomerID] = [t0].[CustomerID]
) AS [orderCount]
FROM [dbo].[Customers] AS [t0] WITH (NOLOCK, INDEX(0))
使用:
公共静态表<TEntity> With<TEntity> (
这个 Table<TEntity> 表,
参数 TableHint[] args) 其中 TEntity : 类 {
//TODO:实现
返回表;
}
公共静态 EntitySet<TEntity> With<TEntity> (
这个 EntitySet<TEntity> 实体集,
参数 TableHint[] args) 其中 TEntity : 类 {
//TODO:实现
返回实体集;
}
和
公共类 TableHint {
//TODO:实现
公共静态 TableHint 无锁;
公共静态 TableHint HoldLock;
公共静态 TableHint 索引(int id){
返回空值;
}
公共静态 TableHint 索引(字符串名称){
返回空值;
}
}
使用某种类型的 LINQ to SQL 可扩展性,除了这个。有任何想法吗?