Breeze 如何在使用';展开';

Breeze 如何在使用';展开';,breeze,Breeze,我有一个要查询的订单表。其中一个属性是“UserId”,它会变成用户的导航属性 我可以通过查询来获取订单和相关用户。但是,我不需要整个用户实体,只需要UserName属性 如何在breeze中构造该查询 比如: let query = new breeze.EntityQuery() .from("orders") .expand("user.userName"); 我尝试了这个方法,但返回的对象实际上不是实体,但它只返回用户名: let que

我有一个要查询的订单表。其中一个属性是“UserId”,它会变成用户的导航属性

我可以通过查询来获取订单和相关用户。但是,我不需要整个用户实体,只需要UserName属性

如何在breeze中构造该查询

比如:

let query = new breeze.EntityQuery()
            .from("orders")
            .expand("user.userName");
我尝试了这个方法,但返回的对象实际上不是实体,但它只返回用户名:

let query = new breeze.EntityQuery()
            .from("cases")
            .select("field1, field2, user.userName");

还有别的方法吗?请注意,我在背面使用了EF。

我找到的最佳解决方案是创建一个“虚拟实体”,它只包含我想要的两个字段。换句话说,我将AspNetUsers作为一个表和它对应的实体。然后我有第二个代码第一实体,它只包含Id和用户名:

[Table("AspNetUsers")]
public partial class User
{
    [Key]
    [Column("Id")]
    public string AspNetUserId { get; set; }

    [StringLength(256)]
    public string UserName { get; set; }
}

然后,我可以在其他表中使用它作为关系,并将其包括在内,就像是另一个表一样

最后,我为用户表创建了一个视图,其中只包含Id和用户名,并根据需要提供相关信息。是的,当我无法更改服务器端时,另一种方法是进行单独的投影查询,以在实体中创建一个仅限客户端的列。您可以在订单中进行迭代,并从('users').where('userId','eq',order.userId.)中为每个订单启动投影查询。选择('userName'),然后在中选择('userName')。order.userName=data.results[0]。userName我称之为“回填”:)就是这样。我想这是一种必然的邪恶。拥有导航属性的投影和过滤功能会很好,但我当然不会吝惜它们的优先级。很高兴有这样一个节省时间和复杂性的库来使用是的,我同意。微风是一种伟大的产品——没有它就无法生存。