2016-04-05 63 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; 

添加此属性足以未混淆实体框架。

相关问题