我遵循了这里的好建议(使用breezejs和web api处理计算的属性),以允许Breeze访问我在服务器端的部分类中设置的计算属性:
public partial class EventPerson
{
[NotMapped]
public Decimal TotalAmountPaid
{
get
{
return this.EventPersonPayments.Sum(p => p.AmtPaid);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但对于我检索的每个EventPerson,除非我使用.expand("EventPersonPayments")clientside或.Include("EventPersonPayments")serverside,否则此值显示为0.
我不希望将EventPersonPayments中的所有数据序列化并发送到客户端; 我想要的只是总和值.这可能吗?
编辑:如果我的计算属性是从实体中已有的其他属性派生的,它可以正常工作.例如:
public partial class EventPerson
{
[NotMapped]
public String DisplayName
{
get
{
return this.FirstName + " " + this.LastName;
}
}
}
Run Code Online (Sandbox Code Playgroud)
返回JSON有效内容中的DisplayName.除非我专门加载所有额外信息,否则以前计算的属性类型总是返回0或null.
我考虑将这些转换为SQL Server中的用户定义函数,但我不应该抛弃我的C#代码,只是为了让它按照应有的方式工作.
我也遇到了这个问题,还有其他几个问题/答案似乎表明了正在发生的事情:
根据我的理解,简而言之,[NotMapped] 会阻止 Breeze/Entity Framework 正确连接到该字段。然而,Json.NET 会序列化该字段并将其发送到 Breeze,如果您通过类的构造函数手动设置该字段,则 Breeze 会填充该字段,并且已通过对实体框架识别的其他属性使用扩展来检索数据。这似乎几乎是一个意外,在这种情况下,您可以让 [NotMapped] 字段在客户端上工作;Breeze+Entity Framework 似乎不是为这种情况设计的。
Breeze 的用户之声中有一个建议,您可以投票和评论。我不确定如果没有实体框架团队的一些工作,Breeze 是否可以自己解决这个问题,但至少它可以让他们注意到这个问题。
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |