2012-09-30 96 views
3

反對我有Category,可以有RootCategory。問題是,它不設置RootCategoryID正確,相反,它是創造,我沒有在我的模型還送數據庫Category_ID如何設置ID,以記者在實體框架

像我期望它,如果我沒有在RootCategory的方式修改get它映射的一切。但隨後RootCategory總是空(他不知道從哪裏得到它)

型號

public class Category 
{ 
    public int ID { get; set; } 
    // Tried [ForeignKey("RootCategoryID")] 
    public Category RootCategory { 
     get 
     { 
      ORDataContext _db = new ORDataContext(); 
      return _db.Categories.Where(x => x.ID == this.RootCategoryID).SingleOrDefault(); 
     } 
    } 
    public int? RootCategoryID { get; set; } // This does not set itself properly 

    public ICollection<Category> ChildCategories { get; set; } 
} 

生成的數據庫後update-database

-ID 
-RootCategoryID (that I have created, but it's not used) 
-Category_ID (taht EF created for me, that I don't want) 

回答

4

你不需要manuallyload的導航性能RootCategory像你一樣,EF會自動做到這一點。然而,EF有麻煩推斷你想要什麼,你應該明確地或者與數據註解映射它:

public class Category 
    { 
     public int ID { get; set; } 

     public virtual Category RootCategory { get; set; } 
     [ForeignKey("RootCategory")] 
     public int? RootCategoryID { get; set; } // This does not set itself properly 

     public virtual ICollection<Category> ChildCategories { get; set; }  

    } 

或通過流暢:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Entity<Category>() 
     .HasMany(c => c.ChildCategories) 
     .WithOptional(ca => ca.RootCategory) 
     .HasForeignKey(c => c.RootCategoryID); 
    } 

和所有的屬性/集合應該工作。

+0

如果我嘗試註釋例返回'RootCategory'爲'null'所有的時間。 – sed

+1

@Qmal - 嘗試添加'virtual'關鍵字與關聯屬性('ChildCategories'和'RootCategory'),以使延遲加載。然後,實體框架將根據需要加載關聯的實體。 –

+0

虛擬'做了伎倆。謝謝。 – sed