1

假设对象模型如下:

abstract BaseObject  
{  
    Id { get;set; }  
}

ObjectTypeA : BaseObject
{  
    SomeProperty { get;set; }  
}

ObjectTypeB : BaseObject
{  
    AnotherProperty { get;set; }  
}

如果我对 an 进行查询,IQueryable<BaseObject>我将在我的集合中获得这两种继承类型的实例,但我无法访问 SomeProperty 或 AnotherProperty,尽管 entityAspect 数据确实具有两种子类型的正确类型信息。

在某些方面确实有意义,因为查询要求返回特定类型的对象,这就是我得到的。但是在客户端,我将能够转换对象并访问属性。

是否有一种解决方法可以允许在微风中出现类似的行为?

我看到的另一种选择是必须为每种继承的类型轻而易举地进行两次查询,然后以某种方式组合结果并使用它......

4

1 回答 1

1

我不确定我是否理解这个问题。您查询了基本类型(所谓的多态查询)并收到了具体的实体作为回报。这些实体中的每一个都有自己的属性以及基本类型的属性。您可以在客户端应用程序中引用这些属性。

在您的示例中,我只能查询基本类型,Id这意味着我将在客户端上收到一个实体,即“A”或“B”。您可以询问对象是“A”还是“B”。因为您在 JavaScript 中,所以不需要强制转换。您可以通过询问来判断一个对象是否具有someProperty或。anotherProperty“强制转换”的整个概念在 JavaScript 中是无关紧要的。也许我只是不明白你的意思。

更广泛的多态查询可以使用“A”和“B”类型填充 Breeze EntityManager 缓存。您可以使用另一个查询来跟进...仅缓存查询,不会转到服务器...专门针对“A”或“B”类型...如果您想按类型的属性进行过滤在缓存中加载了混合实体之后。也许这就是你所需要的。

于 2013-07-05T02:19:07.667 回答