使用 ServiceStack.OrmLite ServiceStack 查询 table 时出现 MissingFieldException

MissingFieldException when querying a table with ServiceStack.OrmLite ServiceStack

我得到一个 MissingFieldException 用于多个 OrmLite 操作:

using (var db = DbFactory.Open())
{
    var exp = db.From<Product>();

    if (filter.Field1 != null)
        exp.Where(w => w.Field1 == filter.Field1);

    if (filter.Field2 != null)
        exp.Where(w => w.Field2 == filter.Field2);

    return db.LoadSelect(exp);
}

简单的 AutoQuery RDBMS 服务也会发生这种情况。

[Api("Query.")]
[Route(“/query, "GET")]
public class QueryTransaction : QueryDb<Transaction, TransactionQueryRecord>,
    IJoin<Transaction, Application>
{
    [ApiMember(IsRequired = false, ParameterType = "query")]
    public string TimeZoneId { get; set; }
}

堆栈跟踪如下:

System.MissingFieldException: Field not found: 'ServiceStack.OrmLite.OrmLiteConfig.UseParameterizeSqlExpressions'.
   at ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider.SqlExpression[T]()
   at ServiceStack.OrmLite.OrmLiteExecFilter.SqlExpression[T](IDbConnection dbConn)
   at ServiceStack.OrmLite.OrmLiteReadExpressionsApi.From[T](IDbConnection dbConn)
   at ServiceStack.TypedQuery`2.CreateQuery(IDbConnection db, IQueryDb dto, Dictionary`2 dynamicParams, IAutoQueryOptions options)
   at ServiceStack.AutoQuery.CreateQuery[From,Into](IQueryDb`2 dto, Dictionary`2 dynamicParams, Request req

我认为 OrmLite 正在尝试找到 属性 配置 OrmLiteConfig.UseParameterizeSqlExpressions,但它在版本 v.4.0.60

中不存在

当我 运行 我与 AppSelfHostBase 的集成测试时一切正常,但当我在浏览器中尝试时有时会工作,有时会抛出异常。

像这样缺少方法或字段异常表明您正在将脏 .dlls 与不同版本混合和匹配在一起。 OrmLiteConfig.UseParameterizeSqlExpressions 在 OrmLite 切换到使用参数化查询后不久前被删除,此错误表明您有一个引用它的旧 .dll。

升级 ServiceStack 项目时,您需要升级所有依赖项 并确保所有 ServiceStack 依赖项都引用相同版本(例如v4.0.60 或当前最新的 v4.5.0)。您可以检查 NuGet /packages 文件夹以查看您的解决方案使用的不同版本。删除除最新版本以外的所有版本并重建您的解决方案将显示构建错误,显示哪些项目仍在引用旧包,您需要更新这些包,以便所有项目都使用相同的版本。