Breeze未从navigationProperties填充实体

Breeze未从navigationProperties填充实体,breeze,Breeze,我有客户端定义的元数据,如下所示: helper.addTypeToStore(manager.metadataStore, { name: 'PriorStudy', dataProperties: { priorStudyId: { type: breeze.DataType.Int32 }, priorStudyType: { max: 6 }, priorStudyPurpose: { max: 12 }, notes: { max: 250 }

我有客户端定义的元数据,如下所示:

helper.addTypeToStore(manager.metadataStore, {
  name: 'PriorStudy',
  dataProperties: {
    priorStudyId: { type: breeze.DataType.Int32 },
    priorStudyType: { max: 6 },
    priorStudyPurpose: { max: 12 },
    notes: { max: 250 }
  }
});

helper.addTypeToStore(manager.metadataStore, {
  name: 'Patient',
  dataProperties: {
    patientId: { type: breeze.DataType.Int32 },
    firstName: { max: 25 },
    lastName: { max: 25 },
  },
  navigationProperties: {
    priorStudies: { entityTypeName: 'PriorStudy', fk: ['patientId'], hasMany: true}
  }
})    
来自服务器的JSON响应的形状如下:

{ FirstName: "Steve",
  LastName: "Holt",
  PatientId: 1,
  PriorStudy: [
    {
      PriorStudyId: 1,
      PriorStudyType: "BLAH",
      PriorStudyPurpose: "Whatever",
      PatientId: 1,
      Notes: "la la la"
    }
  ]
}
我正在测试实体的创建,如下所示:

var query = breeze.EntityQuery.from('Patient/1').toType('Patient')
console.log(query);
manager.executeQuery(query).then(function (results) {
  console.log(results);
})
.then(function () {
  var ents = breeze.EntityQuery.from('PriorStudy').using(manager).executeLocally();
  console.log(ents);
});
患者实体按预期创建,但无论我尝试什么,PriorStudy实体都为空。我打算写一个JsonResultsAdapter

我知道这听起来很像其他的问题,但我已经用了两天的时间来思考这个问题,不知道还有什么好尝试的。任何建议都将不胜感激

编辑:链接到非工作代码
您在这里遗漏了一些东西

1-您正在错误地重新定义客户端元数据。“PriorStudy”实体类型的正确定义如下所示

    name: 'PriorStudy',
    dataProperties: {
       priorStudyId: { type: breeze.DataType.Int32 },
       patientId: { type: breeze.DataType.Int32 },
       priorStudyType: { max: 6 },
       priorStudyPurpose: { max: 12 },
       notes: { max: 250 }
    },

    navigationProperties: {
      patient: 'Patient',
    }
请注意“patientId”外键以及“patient”标量导航属性

然后“患者”实体类型的定义可以如下所示

    name: 'Patient',
    dataProperties: {
      patientId: { type: breeze.DataType.Int32 },
      firstName: { max: 25 },
      lastName: { max: 25 },
    },

    navigationProperties: {
      priorStudies: { entityTypeName: 'PriorStudy', hasMany: true }
    }
请注意,您没有在“患者”实体类型上指定“priorStudies fk”属性

2-正确定义元数据后,在查询中,您可以使用“扩展”方法查询患者,同时从数据库中获取“优先研究”

var query=breeze.EntityQuery.from'Patient/1' .键入“患者” .扩大“优先研究”

编辑1:

添加

编辑2:

除了定义和修复客户端元数据外,还必须编写自己的自定义JsonResultsAdapter。在页面上查找Edmunds和ESPN示例。本教程也可能有帮助

我创建了一个示例来说明如何编写自定义jsonResultsAdapter。查找createJsonResultsAdapter方法


希望这有帮助。

谢谢!现在,尝试加载数据时出现错误:TypeError:undefined不是UpdateRateDentityInCollection的函数http://localhost:1337/js/lib/breeze.debug.js:14542:40 在调试器中,relatedEntity似乎是一个原始对象,因此缺少getProperty方法,而不是包装为实体。有什么想法吗?除非我看到一些代码,否则很难说。我添加了我的plunkr链接来演示这应该如何工作。也许你可以看到并比较你所做的不同。抱歉,回复时间太长了。不得不做其他事情。因此,我注意到在第108-110行的Plunkr示例中,您明确地执行了我试图隐式实现的操作:创建PriorStudy实体并将其添加到Patient实体。明确地说:我正在从服务器获取JSON格式的整个对象图,并试图让breeze将整个内容解析到实体存储中。非常感谢你的帮助。我已经用我的无效代码添加了一个到原始帖子的链接。这看起来很糟糕,但只是我试图教自己微风是如何工作的。对不起。我完全没有注意到您在原始帖子中无法控制服务器的json响应。你说得对。除了定义和修复客户端元数据外,还必须编写自己的自定义JsonResultsAdapter。在电视上查找Edmunds和ESPN的样本。这个链接可能也会有帮助。与此同时,我将努力更新我的帖子,以显示更完整的答案。