2016-04-05 9 views
0

からフェッチするとき、私は私のEF6(コードファースト)アプリで次のコード行を持っている:Entity Frameworkのエラー「無効な列名」特定のテーブル

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

私の目標は、最初のPriceListオブジェクトを取得することで、これはPriceDetailのコレクションを含んでいます。

その行が実行されると、私はこのエラーが表示されます。PriceListPriceDetailオブジェクトでもないが、Orderオブジェクトを参照するため

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

これは私にとって非常に奇妙です。ここでは料金表のオブジェクトは、次のとおりです。

[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

私はこれを最終的に考え出しました。順序オブジェクトをより簡単に、サブサブサブクラスに取得することができるように

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

これは純粋に便宜上アクセサだった:私のOrderオブジェクトでは、私は次のコード行を持っていました。

何らかの理由でEntity Frameworkがこれを解釈し、PriceDetailテーブルとOrderテーブルの間に何らかの関係があり、上記のクエリが発生することを意味すると解釈しました。

解像度はあきれるほど簡単だった:この属性を追加する

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

がun-混同Entity Frameworkのに十分でした。

関連する問題