0

我有一個模型,看起來像這樣:代碼首先映射爲實體框架層次

public class Category 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public Category Parent { get; set; } 
    public ICollection<Category> Children { get; set; } 
    public ICollection<Product> Products { get; set; } 
} 

,看起來像

Categories 
    Id (PK varchar(5)) 
    Description (nvarchar(50)) 
    ParentId (FK varchar(5)) 

但是我難倒了,當涉及到建立一個數據庫表映射

modelBuilder.Entity<Category>() 
    .HasMany(x => x.Children) 
    .WithMany(x => x.Children) 
    .Map(m => 
     { 
      m.ToTable("Categories"); 
      m.MapLeftKey(x => x.Id, "Id"); 
      m.MapRightKey(x => x.Id, "ParentId"); 
     }); 

我可以看到爲什麼映射失敗(StackOverflowException),但我不確知如何解決它。任何幫助將非常感激。

這是使用最新版本的EF(4.1?)。

謝謝!

回答

3

爲什麼你在同一導航屬性上映射多對多關係?這是完全錯誤的。首先你的表格顯然期望一對多的關係。即使您需要多對多關係,也無法使用相同的導航屬性。

試試看:

modelBuilder.Entity<Category>() 
      .HasMany(x => x.Children) 
      .WithOptional(y => y.Parent) 
      .Map(m => m.MapKey("ParentId")); 
+0

真棒。謝謝。還需要記住使這些屬性變爲虛擬。 – Joe 2011-05-19 21:09:49

相關問題