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

时间:2017-02-03 16:42:49

标签: breeze

我希望将有关实体的一些伪信息传递给客户端,并将其与我的实体一起提供。据我所知,只有查询执行后才能使用实体的映射属性。是否有我想要的钩子或其他方式我可以获得从服务器获取给定实体的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在客户端可用。它随查询一起发送给客户端,但不会出现在查询的另一端。

1 个答案:

答案 0 :(得分:1)

您可以将属性添加到实体的客户端定义中,Breeze将为您填充它们。您可以通过为实体注册自定义构造函数来执行此操作:

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

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

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

请参阅Extending Entities上的Breeze文档。