在 Breeze (entityframework, knockout) 查询完成后如何访问原始实体

In Breeze (entityframework, knockout) how can I access the original Entity after a query has completed

我想将一些关于实体的伪信息传递给客户,并让我的实体可以使用这些信息。据我所知,查询执行后只有实体的映射属性可用。是否有我遗漏的钩子或其他方法可以获取从服务器获取给定实体的 API 调用的原始结果?

例如:

server: 

class Patient
{
    [NotMapped]
    public string Name => First + " " + Last;
    public string First {get;set;}
    public string Last {get;set;}
}

client:

this._executeQuery(breeze.EntityQuery.from('api/Patient/1'))                       
  .then(function (data) {
    var data = data[0];
    // data = PatientCtor with first and last properties only
});

我希望 data.name 在客户端可用。它随查询一起发送到客户端,但不会在查询的另一端出现。

您可以将属性添加到实体的客户端定义中,Breeze 会为您填充它们。您可以通过为实体注册一个自定义构造函数来做到这一点:

function Patient() {
    this.name = "";
}
var em = new breeze.EntityManager();
em.metadataStore.registerEntityTypeCtor("Patient", Patient);

请注意,您需要在第一次查询之前执行此操作。

然后,当 breeze 根据查询创建 Patient 实体时,它将填充未映射的 name 属性.

请参阅 Extending Entities 上的 Breeze 文档。