2016-03-01 9 views
5

Ich habe eine LINQ-Abfrage, die in einem EF 6 (Code First) -Projekt funktioniert. Jetzt habe ich den Code EF 7 migriert, und diese Abfrage wirft nun eine Ausnahme: Argument: Anwesen ‚Int32 ID‘ nicht für TypLINQ Abfrage mit zwei Joins, die in EF 6 funktionierte gibt Fehler in EF 7

die Abfrage ‚X.Models.Domain.MadeChoice‘ definiert ist:

var madeChoices = from res in X.Instance.Residence 
        join room in X.Instance.Room on res.ID equals room.Residence.ID 
        join madeChoice in X.Instance.MadeChoice on room.ID equals madeChoice.Room.ID 
        where res.ID == residence.ID 
        select room.MadeChoices; 

Die MadeChoice Klasse:

public class MadeChoice 
{ 
    public virtual int ID { get; set; } 

    [Required] 
    public virtual ChoiceGroup Choicegroup { get; set; } 

    [Required] 
    public virtual Room Room { get; set; } 

    [Required] 
    public virtual Item Item { get; set; } 
} 

Die Zimmerklasse:

public class Room 
{ 
    public virtual int ID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public virtual Residence Residence { get; set; } 
    public virtual RoomType RoomType { get; set; } 
    public virtual List<MadeChoice> MadeChoices { get; set; } 

    // Constructors: 
    public Room() 
    { 
     this.MadeChoices = new List<MadeChoice>(); 
    } 
} 

Die Residieren nce class:

public class Residence 
{ 
    public int ID { get; set; } 
    public string ApartmentNumber { get; set; } 

    public static IQueryable<List<MadeChoice>> GetMadeChoices(Residence residence) 
    { 
     var madeChoices = from res in X.Instance.Residence 
          join room in X.Instance.Room on res.ID equals room.Residence.ID 
          join madeChoice in X.Instance.MadeChoice on room.ID equals madeChoice.Room.ID 
          where res.ID == residence.ID 
          select room.MadeChoices; 
     System.Diagnostics.Debug.Write("MadeChoices.Count: "); 
     System.Diagnostics.Debug.WriteLine(madeChoices.Count()); 
     foreach (var madechoice in madeChoices) 
     { 
      System.Diagnostics.Debug.Write("MadeChoice.Count: "); 
      System.Diagnostics.Debug.WriteLine(madechoice.Count()); 
     } 
     return madeChoices; 
    } 

    // Navigational properties: 
    public virtual List<Room> Rooms { get; set; } 
    public virtual ResidenceType ResidenceType { get; set; } 
    public virtual List<Tenant> Tenants { get; set; } 
    public virtual List<PeriodResidenceDeadline> PeriodResidenceDeadline { get; set; } 

    // Constructors: 
    public Residence() 
    { 
     this.Rooms = new List<Room>(); 
     this.Tenants = new List<Tenant>(); 
     this.PeriodResidenceDeadline = new List<PeriodResidenceDeadline>(); 
    } 
} 

Ursprünglich war die ID nicht virtuell, hatte aber keinen Einfluss auf den Fehler. Die Datenbank sieht wie in EF 6 aus. Die Beziehungen sind eins zu viele. Ich benutze EF 7.0.0-rc1-final.

Irgendwelche Hinweise?

Vielen Dank im Voraus,

Peter

+0

Vielleicht Zugabe von [Taste] auf dem ID-Eigenschaft helfen? – cdie

+0

@cdie Nein, es hat nicht geholfen :( –

+0

Könnten Sie Ihre Mappings posten? – cdie

Antwort

1

Als EF-Team sagte, EF-Core RC1 nicht komplexe Untertypen umgehen kann (siehe ihre Roadmap hier https://github.com/aspnet/EntityFramework/wiki/Roadmap#in-progress für Query)

Für Abfragen, diese wird in der EF Core 1.0 RTM-Version behandelt.

In der Zwischenzeit Sie eine der Lösung verwenden kann ich aufzählen hier: EF Core fluent mapping to inner object properties (das Problem für die Zuordnung das gleiche ist)

+0

Ein Kommentar für den Datensatz, da er anderen Lesern helfen könnte: Es scheint, als würde dieser Fehler auftreten, wenn die Select-Anweisung a auswählt Liste und kein einziges Objekt. –