breeze projection : error selecting non scalar navigation properties

北慕城南 提交于 2019-12-08 02:41:33

问题


Ho to everybody. Below you can see the partial result of the EF Power Tools reverse engineering made on the database of mine.

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);        
}

If, by using breeze, i try to perform this query

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

or this one

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

everything works fine, but if i try with this

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

it throw an exeption :

Unable to locate property 'Id_Udc' on type 'System.Collections.Generic.ICollection`1[AWM.Models.Udc_Dettaglio]'."

Am I missing something in EF model definition ? i guess not because expand utility is working ...


回答1:


I believe you are trying to build a query that EF doesn't support (and that OData query syntax doesn't support either).

Your FK_Udc_Dettaglio_Articoli is a collection navigation property of Articoli. By trying to go after just the Id_Udc property of each element in that collection, you are actually trying to create a projection within a projection ... and EF doesn't support that as far as I know.

To verify, try to construct a LINQ query on the server side that does what you want. Something like

dbContext.Articoli.Select(
    a => new {a.Codice, a.FK_Udc_Dettaglio_Articoli.Select(f => new {f.Id_Udc}));

You'll quickly discover that that query does not compile. You get a message something like "anonymous type projection initializer should be simple name or member access expansion".



来源:https://stackoverflow.com/questions/21531964/breeze-projection-error-selecting-non-scalar-navigation-properties

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!