我有一个名为Workorders的实体和一个名为WorkordersView的实体 - 都指向数据库中的同一个表。
两者都有一个名为“customerId”的字段,其类型为int。
当我查询我的视图并设置其where子句时:
.where("customerId", "eq", "73")
它工作文件并产生这个$ filter:
但是当我将确切的EntityQuery更改为指向表实体时,它会像这样创建它:
由于数据类型无效,导致EF抛出错误。
我的第一站是查看返回的元数据,看看BreezeClient是否认为它是一个字符串,但是表和视图版本都是EdmInt32的数据数据类型。
查看实体版本:
和表实体版本:
我错过了一些明显的东西吗?谢谢。
答案 0 :(得分:0)
任何时候你看到这样的东西,通常是一个很好的选择,你没有得到客户端有问题的EntityType的良好元数据。构造查询时,通常使用'resourceName'来指定查询的端点,breeze通过EntityType / ResourceName映射在内部将其转换为EntityType(在文档中讨论)。这种查找很可能失败了。这不一定是微风的错误,因为breeze还支持没有元数据的端点,但在这些情况下,微风需要额外的信息。
您可以通过在执行后转到查询并使用EntityQuery.fromEntityType属性来检查这一点(请参阅http://www.breezejs.com/sites/all/apidocs/classes/EntityQuery.html#property_fromEntityType)。我的猜测是,这将返回一个匿名的EntityType而不是您期望的“WorkOrder”类型。如果是这样,那么正在发生的事情是,当breeze没有找到有问题的查询的EntityType时,它必须猜测filter子句的数据类型。
要解决此问题,请修复导致您获取错误元数据的问题(通常是错误的资源名称)或使用“EntityQuery.toType”方法强制查询使用指定的EntityType。这两个都在下面的链接中讨论。
http://www.getbreezenow.com/documentation/query-result-debugging
讨论您可能遇到的资源名称/ entityType名称映射问题。