【发布时间】:2020-04-21 06:48:39
【问题描述】:
我遵循了这里的好建议 (Handling calculated properties with breezejs and web api) 以允许 Breeze 访问我在服务器端的部分类中设置的计算属性:
public partial class EventPerson
{
[NotMapped]
public Decimal TotalAmountPaid
{
get
{
return this.EventPersonPayments.Sum(p => p.AmtPaid);
}
}
}
但是对于我检索的每个 EventPerson,此值显示为 0,除非我使用 .expand("EventPersonPayments") 客户端或 .Include("EventPersonPayments") 服务器端。
我不希望 EventPersonPayments 中的所有数据都被序列化并发送到客户端;我想要的只是总和值。这可能吗?
编辑:如果我的计算属性是从实体中已有的其他属性派生的,那么它可以正常工作。例如:
public partial class EventPerson
{
[NotMapped]
public String DisplayName
{
get
{
return this.FirstName + " " + this.LastName;
}
}
}
返回 JSON 有效负载中的 DisplayName。除非我专门加载所有额外信息,否则前一种类型的计算属性总是返回 0 或 null。
我考虑将这些转换为 SQL Server 中的用户定义函数,但我不应该仅仅为了让它按应有的方式工作而丢弃我的 C# 代码。
【问题讨论】:
-
如果我不需要为了得到我需要的计算值而积极地把所有东西都带过来,那么我刚刚做了一个计算,我的 JSON 有效负载将是大小的 1/5。有人有什么想法吗?
-
我有点惊讶其他人似乎也没有这个问题;我知道求和是 Breeze JS 应该为将来的版本所做的事情,但即使他们这样做了,基于导航属性的计算属性仍然是一项重要的功能。其他人是否以不同的方式处理这个问题?