假设对象模型如下:
abstract BaseObject
{
Id { get;set; }
}
ObjectTypeA : BaseObject
{
SomeProperty { get;set; }
}
ObjectTypeB : BaseObject
{
AnotherProperty { get;set; }
}
如果我对IQueryable<BaseObject>
进行查询,我将在我的集合中获取两个继承类型的实例,但我无法访问SomeProperty或AnotherProperty,尽管entityAspect数据确实具有两个子类型的正确类型信息
在某种程度上它确实有意义,因为查询要求返回特定类型的对象,这正是我得到的。但是在客户端,我可以转换对象并访问属性。
是否有一种解决方法可以在微风中实现类似的行为?
我看到的另一种选择是在每个继承类型的微风中正确地进行两个查询,然后以某种方式组合结果并使用它...
答案 0 :(得分:1)
我不确定我理解这个问题。您查询了基本类型(所谓的多态查询)并收到了具体实体作为回报。这些实体中的每一个都有自己的属性以及基类型的属性。您可以在客户端应用程序中引用这些属性。
在您的示例中,我只能通过Id
查询基本类型,这意味着我将在客户端上收到一个实体,即'A'或'B'。您可以询问对象是“A”还是“B”。因为你是JavaScript,所以你不需要施放。您可以通过询问对象来判断对象是否包含someProperty
或anotherProperty
。 “铸造”的整个概念在JavaScript中是无关紧要的。也许我只是不明白你的观点。
更广泛的多态查询可以使用“A”和“B”类型填充Breeze EntityManager缓存。您可以使用另一个查询...仅缓存查询不会转到服务器...专门针对'A'或'B'类型...如果您想按类型的属性进行过滤在缓存中加载了混合的实体之后。也许这就是你需要的。