2013-04-21 86 views
1

我有兩個表,我想加入遊戲和細節。遊戲有一個細節EF代碼中的關係問題 - 第一個

問題是,我不能綁定表正確。我得到的錯誤是

「實體類型'Game'和'Details'無法共享表'Details',因爲它們不在同一個類型層次結構中,或者沒有與匹配主鍵的有效一對一外鍵關係他們之間的鑰匙。「

這是我實現

public class Game 
{ 
    [Key] 
    [ForeignKey("GameDetails")] 
    public int GameId { get; set; } 

    public string GameName { get; set; } 

    //Navigation prop 
    public virtual Details GameDetails { get; set; } 
    public virtual ICollection<Details> DetailsId { get; set; } 
} 

public class Details 
{ 
    [Key] 
    public int DetailsId { get; set; } 

    public int GameId { get; set; } 
    public int RatingId { get; set; } 

    public int Grade { get; set; } 

    //Navigation prop 
    [ForeignKey("DetailsId")] 
    public virtual Game GameDetails { get; set; } 
    public virtual RatingCompany RatingCompany { get; set; } 
} 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Game>().HasKey(f => f.GameId); 
     modelBuilder.Entity<Game>() 
      .Map(m => 
        { 
         m.Properties(b => new {b.GameId}); 
         m.ToTable("Details"); 
        }); 
    } 

我怎麼能以1-1的關係正確綁定呢?

回答

0

如果你重寫OnModelCreating,你不應該有屬性的屬性。

+0

感謝當我刪除屬性,它的工作 – user2254948 2013-04-21 13:52:10

0

OK,你也可以做它用數據註解屬性:

所有你不需要在兩個實體,以指定的外鍵
  • 首先,你只需要在相關的實體來指定。
  • 同樣在Principal類中,即使想要引用依賴實體的ID,也不需要存儲依賴實體的ID。
  • 另外既然它是1-1關係,你不需要這一行: public virtual ICollection DetailsId {get;組; }
    • 從你在說什麼遊戲是主體和細節是依賴的。

的代碼可以如下所示:

public class Game 
{ 
    [Key] 
    public int GameId { get; set; } 

    public string GameName { get; set; } 

    //Navigation prop 
    public virtual Details GameDetails { get; set; } 
} 

public class Details 
{ 
    [Key] 
    [ForeignKey("Game")] 
    public int GameId { get; set; } 

    public int RatingId { get; set; } 

    public int Grade { get; set; } 

    //Navigation prop 
    public virtual Game Game{ get; set; } 
    public virtual RatingCompany RatingCompany { get; set; } 
}