'entityType'参数必须是'EntityType'的实例

时间:2014-09-03 18:20:26

标签: javascript breeze hottowel

我刚刚开始使用BreezeJS并将HotTowel模板与Asp.Net Web Api和EF一起使用

我已经尝试使用manager.getEntityByKey尝试检索记录,使用http://www.breezejs.com/documentation/querying-locally

上的示例

使用代码测试我:

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

但是当代码被调用时,我会收到错误'> entityType'参数必须是' EntityType'的实例。 '第一行代码。

在调用代码时,管理器具有" LibraryItemCategory"加载了实体,我使用Visual Studio确认entityType shortName是" LibraryItemCategory"

有人可以说出代码中有什么问题,或者我如何能够解决这个问题?

谢谢

马克

2 个答案:

答案 0 :(得分:1)

问题是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得到它。

p.s。:在调用此代码之前,您必须填充manager.metadataStore,或者隐式地将其作为第一个查询的副作用,或明确地作为when you call fetchMetadata

答案 1 :(得分:0)

终于想通了,我忘记了通过从服务器调用元数据来“启动”应用程序,因此Breeze不明白这种类型是什么