微风投影:选择非标量导航属性时出错

时间:2014-02-03 16:01:50

标签: entity-framework breeze

对大家来说。下面您可以看到在我的数据库中进行的EF Power Tools逆向工程的部分结果。

public partial class Articoli {        
    public decimal Id_Articolo { get; set; }
    public string Codice { get; set; }
    public virtual ICollection<Udc_Dettaglio> FK_Udc_Dettaglio_Articoli { get; set; }
}

public partial class Udc_Dettaglio {
    public decimal Id_Udc { get; set; }
    public decimal Id_Articolo { get; set; }
    public virtual Articoli FK_Udc_Dettaglio_Articoli { get; set; }
}

public Udc_DettaglioMap() {
    // Primary Key
    this.HasKey(t => new { t.Id_Udc, t.Id_Articolo });

    // Relationships
    this.HasRequired(t => t.FK_Udc_Dettaglio_Articoli)
        .WithMany(t => t.FK_Udc_Dettaglio_Articoli)
        .HasForeignKey(d => d.Id_Articolo);        
}

如果通过使用breeze,我尝试执行此查询

breeze.EntityQuery.from("Articoli").expand("FK_Udc_Dettaglio_Articoli")

或者这个

breeze.EntityQuery.from("Articoli").select("Codice,FK_Udc_Dettaglio_Articoli")

一切正常,但如果我尝试这个

breeze.EntityQuery.from("Articoli").select("Codice,FK_Udc_Dettaglio_Articoli.Id_Udc")

它抛出了一个例外:

无法在类型'System.Collections.Generic.ICollection`1 [AWM.Models.Udc_Dettaglio]'上找到属性'Id_Udc'。“

我在EF模型定义中遗漏了什么?我想不是因为扩展实用程序正在运行...

1 个答案:

答案 0 :(得分:1)

我相信您正在尝试构建一个EF不支持的查询(并且OData查询语法也不支持)。

您的FK_Udc_Dettaglio_ArticoliArticoli的集合导航属性。通过尝试仅追踪该集合中每个元素的Id_Udc属性,您实际上是尝试在投影中创建投影 ...并且EF不支持该目标据我所知。

要验证,请尝试在服务器端构建一个能够执行所需操作的LINQ查询。像

这样的东西
dbContext.Articoli.Select(
    a => new {a.Codice, a.FK_Udc_Dettaglio_Articoli.Select(f => new {f.Id_Udc}));

您很快就会发现该查询无法编译。您收到类似“匿名类型投影初始化程序应该是简单名称或成员访问扩展”的消息。