2016-04-04 16 views
0

MVC 5.2、EF 6.1.3、およびSQL Server 2008 R2でコードファーストを使用しています。EFが外部キーをマップできません

アイテムと表示の2つのテーブルがあります。 Itemには、Display.DisplayIDへの外部キーを持つPreOrderDisplayIDという列があります。 EF層で

、私が持っている:私はEFを経由して、このテーブルを照会しようとすると

class Item 
    public int? PreOrderDisplayID { get; set; } 
    public virtual Display PreOrderDisplay { get; set; } 
... 
class Display 
    public int DisplayID { get; set; } 
    public virtual ICollection<Item> PreOrderItems { get; set; } 
... 
class OrdersContext : DbContext 
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Display>() 
       .HasMany(e => e.PreOrderItems) 
       .WithOptional(e => e.PreOrderDisplay) 
       .HasForeignKey(e => e.PreOrderDisplayID); 
}  
... 

、私が取得:

無効な列名 'Display_DisplayID'。

と、私はカバーの下に、EFが存在しない列でSQLを生成していることがわかります。

INNER JOIN [dbo].[Item] AS [Extent2] ON [Extent1].[ItemID] = [Extent2].[ItemID] 
... 
LEFT OUTER JOIN [dbo].[Display] AS [Extent5] ON [Extent2].[Display_DisplayID] = [Extent5].[DisplayID] 

私が間違っているのか?ありがとうございました。

+0

は 'Item'と'表示のための完全なクラス定義を示し、 'とフルフューム構成 – Moho

答えて

0

PreOrderDisplayおよびPreOrderDisplayIDをItemに追加する前に、Item.DisplayおよびItem.DisplayIDプロパティを使用して表示するアイテムに既に別の関係が存在するという問題がありました。その関係は、前HasForeignKey句を使用せずに罰金働いていたが、新しい関係を添加した後、私は、元の関係に行くとHasForeignKey句を追加する必要がありました:

modelBuilder.Entity<Display>() 
      .HasMany(e => e.Items) 
      .WithOptional(e => e.Display) 
      .HasForeignKey(e => e.DisplayID); 
関連する問題