当多个类型具有/共享相同的短名称时的breeze元数据

时间:2014-07-29 12:54:48

标签: metadata breeze

我在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格式的问题吗?

感谢您的帮助!

1 个答案:

答案 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版本。