我为多个OrmLite操作获得MissingFieldException
:
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
运行集成测试时,一切正常,但是当我在浏览器中尝试时,有时会工作,有时会抛出异常。
答案 0 :(得分:3)
缺少这样的方法或字段异常表示您将脏.dlls
与不同版本混合并匹配在一起。在OrmLite切换为使用参数化查询后,OrmLiteConfig.UseParameterizeSqlExpressions
被删除了一段时间,此错误表明您有一个引用它的旧.dll。
升级ServiceStack项目时,您需要升级所有依赖项,并确保所有ServiceStack依赖项都引用相同版本(例如v4.0.60或当前最新版本v4) .5.0)。您可以查看NuGet /packages
文件夹以查看解决方案使用的不同版本。删除除最新版本以外的所有版本并重建您的解决方案将显示构建错误,显示哪些项目仍引用旧版软件包,您需要更新这些软件包以便所有项目使用相同版本。