我只是从BreezeJS开始,然后将HotTowel模板与Asp.Net Web Api和EF一起使用

我已经要尝试使用http://www.breezejs.com/documentation/querying-locally上的示例使用manager.getEntityByKey检索记录了。

要测试我正在使用代码:

 var key = new breeze.EntityKey("LibraryItemCategory", 1);
            var entity = manager.getEntityByKey(key);


但是,在调用代码时,出现错误“对于第一行代码,'entityType'参数必须是'EntityType''的实例。

此时,代码被称为管理器,其中加载了“ LibraryItemCategory”实体,并且我已使用Visual Studio确认entityType shortName为“ LibraryItemCategory”

任何人都可以建议代码中有什么问题或如何解决吗?

谢谢

标记

最佳答案

问题在于EntityKey构造函数的第一个参数必须是EntityType的实例,而不是类型的名称。 See the API doc

因此,您会做这样的事情

var type = manager.metadataStore.getEntityType("LibraryItemCategory");
var key = new breeze.EntityKey(type, 1);
var entity = manager.getEntityByKey(key);


有点笨拙。

您可能想知道为什么EntityKey不接受类型的名称并使用它来找到EntityType

好吧……这不可能……因为EntityKey“类”无法发现您的EntityTypes。所有EntityType信息都保存在MetadataStore ...中,其中可能有很多。

我们必须从MetadataStore获取类型;在此示例中,我们从经理的metadataStore中获取它。

附注:您必须先填充manager.metadataStore,然后再调用此代码,这是第一个查询的隐式影响,或者是显式的when you call fetchMetadata

10-05 20:51