我在http://www.breezejs.com/documentation/load-metadata-script后面的数据库中生成元数据 我的问题是:如何为数据库中具有相同名称但不同舍入的两个实体生成元数据?
我尝试为我的实体使用限定名称:...
"entityType": [
{
"name": "Admin.RefactorColumn",
"key": {
"propertyRef": {
"name": "Id"
}
},
"property": [
{
"name": "Id",
"type": "Edm.Int32",
"nullable": "false",
"annotation:StoreGeneratedPattern": "Identity"
}, ...
... 问题是当我创建entityManager.saveChanges()并从服务器breeze返回saveResult(也是手工制作)时,查找名为RefactorColumn的实体:#Admin ...而不是Admin.RefactorColumn:#... < / p>
如果name只是“RefactorColumn”而不是“Admin.RefactorColumn”,我没有问题
我可以解决更改元数据格式或saveResult格式的问题吗?
感谢您的帮助!
答案 0 :(得分:0)
所有breeze EntityTypes都具有名称空间限定名称的概念。此名称是&#39; shortName&#39;的组合。和一个名称空间&#39;。从breeze 1.4.16开始,可以通过调用 EntityType.qualifyTypeName 静态函数来创建限定名称。即
var shortName = "Employee";
var namespace = "My.Qualified.Namespace";
var qualifiedName = breeze.EntityType.qualifyTypeName(shortName, namespace);
// qualifiedTypeName will be => "Employee:#My.Qualified.Namespace"
通常,所有breeze API都将接受shortName或限定名称。如果提供了shortName,那么breeze将通过在本地metadataStore中找到具有匹配shortName的第一个限定名称,在内部将其转换为限定名称。
每种实体类型的Breeze元数据可以从服务器检索或在客户端上定义。如果在客户端上定义,您的entityType将被定义为:
myMetadataStore.addEntityType({
shortName: "RefactorColumn",
namespace: "Admin",
autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
dataProperties: {
id: { dataType: DataType.Int32, isPartOfKey: true, isNullable: false },
// additional properties here:
},
});
breeze.js.samples GitHub repo中的DocCode示例中有几个这种技术的例子。
或者,如果您通过从服务器返回json来定义元数据,则有两个选项,您可以返回有效的OData元数据定义(它看起来就像您要在上面返回的那样)或者您可以使用breeze&# 39; s原生元数据格式,更简单。查看内容的最简单方法是在客户端上创建元数据,如上所示和调用
var exportedMetadata = myMetadataStore.exportMetadata();
exportedMetadata的内容将在本地&#39; breeze元数据格式,基本上只是内部entityType定义的jsonified版本。