Breeze不会从navigationProperties填充实体

时间:2014-05-11 20:26:37

标签: 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: '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。

我知道这听起来很像其他问题,但我已经对它持续了两天,并且不知道还有什么可以尝试。任何建议都将受到极大的赞赏。

编辑:链接到非工作代码 https://gist.github.com/dlmanning/c09fe225995bc7cb682b

1 个答案:

答案 0 :(得分:0)

你在这里缺少一些东西。

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'外键以及患者'标量导航属性。

然后是您患者的定义'实体类型可以如下所示。

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

    navigationProperties: {
      priorStudies: { entityTypeName: 'PriorStudy', hasMany: true }
    }

请注意,您没有指定先前的研究fk'患者的财产'实体类型。

2 - 当您正确定义了元数据后,在查询中,您可以通过“展开”来查询您的患者。方法也带来了'PriorStudies'来自数据库。

var query = breeze.EntityQuery.from('Patient/1') .toType('Patient') .expand('priorStudies');

编辑1:

添加Plunkr

编辑2:

除了定义(和修复)客户端元数据之外,您还必须编写自己的自定义JsonResultsAdapter。在Breeze Samples页面上查找Edmunds和ESPN示例。 Breeze mapping json教程也可能会有所帮助。

这是我创建的gist,用于说明如何编写自定义jsonResultsAdapter。寻找createJsonResultsAdapter方法。

希望这有帮助。