我刚刚开始使用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"
有人可以说出代码中有什么问题,或者我如何能够解决这个问题?
谢谢
马克
答案 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不明白这种类型是什么