小编Con*_*nor的帖子

WithSqlFilter WITH (NOEXPAND) 提示在输出 SQL 中不正确

我正在尝试使用新的.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)

c# sql-server servicestack ormlite-servicestack

2
推荐指数
1
解决办法
225
查看次数