2016-04-05 10 views
0

Ich habe die folgende Codezeile in meinem EF6 (Code-first) App:Entity Framework Fehler "Ungültige Spaltenname", wenn aus bestimmten Tabelle holen

var priceDetail = context.PriceLists.Include(pl => pl.PriceDetails).FirstOrDefault(); 

Mein Ziel das erste PriceList Objekt abzurufen ist, die enthält eine Sammlung von PriceDetail s.

Wenn diese Zeile ausgeführt wird, erhalte ich diesen Fehler:

-- Failed in 12 ms with error: Invalid column name 'Order_OrderNumber'. 

Dies ist für mich sehr seltsam ist, weil weder die PriceList noch die PriceDetail Objekte verweisen die Order Objekt. Hier ist die Preisliste Objekt:

[Table("dbo.PriceList")] 
public class PriceList 
{ 
    public int PriceListId { get; set; } 

    [StringLength(150)] 
    [Display(Name = "PriceList name")] 
    public string PriceListDesc { get; set; } 

    public virtual ICollection<PriceListDetail> PriceDetails { get; set; } 
} 

Und hier ist das PriceDetail Objekt:

[Table("dbo.PriceDetail")] 
public class PriceDetail 
{ 
    [ColumnDesc("Primary key")] 
    public int PriceDetailId { get; set; } 

    [ForeignKey("PriceList")] 
    public int PriceListId { get; set; } 
    public PriceList PriceList { get; set; } 

    [ForeignKey("Item")] 
    public int ItemNumber { get; set; } 
    public Item Item { get; set; } 

    public Decimal Price { get; set; } 

    public Decimal? CostMultiplier { get; set; } 
} 

Die vollständige SQL-Abfrage, die EF erzeugt, ist wie folgt:

SELECT 
    [Project1].[PriceListId] AS [PriceListId], 
    [Project1].[PriceListDesc] AS [PriceListDesc], 
    [Project1].[C1] AS [C1], 
    [Project1].[PriceDetailId] AS [PriceDetailId], 
    [Project1].[PriceListId1] AS [PriceListId1], 
    [Project1].[ItemNumber] AS [ItemNumber], 
    [Project1].[PriceList] AS [PriceList], 
    [Project1].[Order_OrderNumber] AS [Order_OrderNumber] 
    FROM (SELECT 
     [Limit1].[PriceListId] AS [PriceListId], 
     [Limit1].[PriceListDesc] AS [PriceListDesc], 
     [Extent2].[PriceDetailId] AS [PriceDetailId], 
     [Extent2].[PriceListId] AS [PriceListId1], 
     [Extent2].[ItemNumber] AS [ItemNumber], 
     [Extent2].[PriceList] AS [PriceList], 
     [Extent2].[Order_OrderNumber] AS [Order_OrderNumber], 
     CASE WHEN ([Extent2].[PriceDetailId] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1] 
     FROM (SELECT TOP (1) [c].[PriceListId] AS [PriceListId], [c].[PriceListDesc] AS [PriceListDesc] 
      FROM [Admin].[PriceList] AS [c]) AS [Limit1] 
     LEFT OUTER JOIN [Admin].[PriceDetail] AS [Extent2] ON [Limit1].[PriceListId] = [Extent2].[PriceListId] 
    ) AS [Project1] 
    ORDER BY [Project1].[PriceListId] ASC, [Project1].[C1] ASC 

Warum soll ich das bekommen Error?

+0

tun die Artikel selbst die Bestellung? – hdrdiab

+0

War die Eigenschaft früher vorhanden, haben Sie sie geändert und vergessen, die Datenbank zu migrieren? –

+0

Der Artikel verweist überhaupt nicht auf die Bestellung; Ich habe den obigen Code eingefügt. – Daniel

Antwort

0

Ich endlich herausgefunden. In meinem Order Objekt hatte ich die folgende Codezeile:

public ICollection<PriceDetail> PriceDetails => AssignedLocation?.LocationDetail?.PriceList?.PriceDetails; 

Dieses rein Accessor für Bequemlichkeit so war das Auftragsobjekt zu der Sub-Sub-Sub-Klasse leichter zu bekommen.

Aus irgendeinem Grund, den ich nicht vollständig verstehe, interpretierte Entity Framework dies so, dass es eine Beziehung zwischen den PriceDetail und Order Tabellen gab, was zu der obigen Abfrage führte.

Die Auflösung war peinlich einfach:

[NotMapped] 
public ICollection<PriceDetail> PriceDetails => AssignedLocation?.LocationDetail?.PriceList?.PriceDetails; 

Hinzufügen dieses Attribut ausreichend war, Entity Framework un-verwirren.

Verwandte Themen