2016-04-05 64 views
0

取出時,我有下面的代碼行中我EF6(代碼優先)應用:實體框架錯誤「無效列名稱」從特定表

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

我的目標是獲取第一PriceList對象,其中包含一系列PriceDetail s。

當該行執行,我收到此錯誤:

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

這是很奇怪的我,因爲無論是PriceList也不PriceDetail對象引用Order對象。下面是價格表對象:

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

這裏是PriceDetail對象:

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

是EF生成完整的SQL查詢如下:

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 

爲什麼我收到這個錯誤?

+0

做項目本身是否參考訂單? – hdrdiab

+0

這個屬性曾經存在嗎,你已經改變了它,忘記了遷移數據庫? –

+0

該項目根本不參考訂單;我已經包含了上面的所有代碼。 – Daniel

回答

0

我終於明白了這一點。在我Order對象,我有下面的代碼行:

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

這純粹是爲了方便的存取,因此訂單對象能拿子子子類更容易。

出於某種原因,我不完全瞭解,實體框架將其解釋爲意味着PriceDetailOrder表之間存在某種關係,從而導致上述查詢。

該決議是令人尷尬的簡單:

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

添加此屬性足以未混淆實體框架。

相關問題