我正在尝试使用新的.WithSqlFilter()扩展方法将“WITH (NOEXPAND)”提示添加到针对我的索引视图生成的 select 语句中。但是,输出 SQL 将提示放在 WHERE 子句之后,而不是 FROM 子句之后。我的客户 DTO 也有[Alias("CustomerInfo")]. 这是预期的行为还是错误地生成了 SQL?
var customer = db.From<Customer>()
.Where(ci => ci.CustomerId == customerCode)
.WithSqlFilter(sql => IsSqlServer(db) ? sql + " WITH (NOEXPAND)" : sql);
return db.Single(customer);
Run Code Online (Sandbox Code Playgroud)
编辑:我需要 IsSqlServer 方法,因为我还有单元测试和其他使用 Sqlite 而不是 SQL Server 的代码,并且需要能够忽略基于连接的提示。
private bool IsSqlServer(IDbConnection db)
{
var dialect = db.GetDialectProvider();
return dialect is ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider ||
dialect is ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider ||
dialect is ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider ||
dialect is ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider;
}
Run Code Online (Sandbox Code Playgroud)
生成的SQL:
SELECT TOP 1 "CustomerId", "FirstName", …Run Code Online (Sandbox Code Playgroud)