如何在不扩展到相关导航属性的情况下检索计算属性?

Mik*_*ult 6 breeze

我遵循了这里的好建议(使用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#代码,只是为了让它按照应有的方式工作.

Gav*_*now 2

我也遇到了这个问题,还有其他几个问题/答案似乎表明了正在发生的事情:

根据我的理解,简而言之,[NotMapped] 会阻止 Breeze/Entity Framework 正确连接到该字段。然而,Json.NET 会序列化该字段并将其发送到 Breeze,如果您通过类的构造函数手动设置该字段,则 Breeze 会填充该字段,并且已通过对实体框架识别的其他属性使用扩展来检索数据。这似乎几乎是一个意外,在这种情况下,您可以让 [NotMapped] 字段在客户端上工作;Breeze+Entity Framework 似乎不是为这种情况设计的。

Breeze 的用户之声中有一个建议,您可以投票和评论。我不确定如果没有实体框架团队的一些工作,Breeze 是否可以自己解决这个问题,但至少它可以让他们注意到这个问题。