一段时间以来,我一直无法弄清这个错误,希望有人能提供一些见解。首先,我将说明条件,然后再说明不会/不会发生错误的条件。
我有一个Web api,它有两个端点/ api / getData1和/ api / getData2
我有一个Web客户端,它向/ api / getData1发出请求 我还有另一个向api / getData2
发出请求的应用程序getData1和getData2的Web API控制器最终都对dataService.getData(DateTime date)进行了服务调用
dataService.getData(DateTime日期)调用StaticFilterClass.buildFilter(DateTime日期)
StaticFilterClass.buildFilter(DateTime日期)
AlarmFilter filter = null;
var paramExpr = Expression.Parameter(typeof(Alarm), "a");
var fieldRef = Expression.Property(paramExpr, "UtcEnd");
var binaryExpression = Expression.And(
Expression.GreaterThanOrEqual(fieldRef, Expression.Constant(earliestEnd.Date.Add(new TimeSpan(0, 0, 0)).ToUniversalTime(), typeof(DateTime))),
Expression.LessThanOrEqual(fieldRef, Expression.Constant(latestEnd.Date.Add(new TimeSpan(23, 59, 59)).ToUniversalTime(), typeof(DateTime))));
filter = (AlarmFilter)Expression.Lambda(binaryExpression, paramExpr);
dataService.getData(DateTime日期),在获取过滤器之后
dbAlarms = tenantDb.Alarms.Where(completeFilter)?.ToList() ?? dbAlarms;
上面的行有条件地抛出
"The query view generated for the EntitySet 'Alarms' is not valid. The query parser threw the following error : The argument type 'Edm.String' is not compatible with the property 'UtcEnd' of formal type 'Edm.DateTime'. Near member access expression, line 3, column 77.."}
现在,这行引发错误的条件使我感到困惑。
启动Web api时,如果我的Web客户端转到/ api / getData1,则没有错误。从Web客户端到/ api / getData1的后续调用成功 ,从另一个应用程序到/ api / getData2的后续调用成功。
启动Web api时,如果我的其他应用程序首先进入/ api / getData2,则会生成上述错误。从应用程序对/ api / getData2的后续调用和从Web客户端对/ api / getData1的后续调用
有人可以帮我指出正确的方向吗?
编辑: 它似乎与数据库项目.dll的加载顺序有关(由客户端应用和api引用)。我将几个数据库事务从客户端应用程序(直接访问数据库的位置)移到了Web api中,因此api将成为命中数据库的第一件事,因为无论如何它都更有意义。仍然不确定根本原因,但这可以解决问题。
答案 0 :(得分:0)
我只能认为2种: 1)您需要指定一个where返回对象,如下所示:
bAlarms = tenantDb.Alarms.Where<MyReturnObject>(completeFilter)?.ToList<MyReturnObject>() ?? dbAlarms;
2)在“警报”内部有一个静态类/函数,getData1和Getdata2可同时访问该类/函数。