2016-11-15 19 views
4

我對EF有問題。 相關實體始終爲空。到目前爲止,我沒有得到任何解決方案。延遲加載失效,相關實體始終爲空

下面是型號:

public class Categories 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int AtpID { get; set; } 

    public virtual ICollection<SubCategories> SubCategories { get; set; } 
} 

public class SubCategories 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int CategoryID { get; set; } 
    public string LinkToProducts { get; set; } 
    } 

所以,每次Categorie有更多的子類別。 在種子法填充我的數據庫,所以我有數據:

var categories = new List<Categories> 
     { 
     new Categories{Name="Abgasanlage", ID=1}, 
     new Categories{Name="Elektrik",ID=2}, 
     new Categories{Name="Filter", ID=3}, 
     new Categories{Name="Karosserie", ID=4}, 
     new Categories{Name="Kuhlunkg",ID=5} 
     }; 

     categories.ForEach(s => context.Categories.Add(s)); 
     context.SaveChanges(); 

     var subCategories = new List<SubCategories> 
     { 
     new SubCategories{Name="Montageteile", ID=1, CategoryID=1}, 
     new SubCategories{Name="Lamdasonde",ID=2, CategoryID=1}, 
     new SubCategories{Name="Anlasser", ID=3, CategoryID=2}, 
     new SubCategories{Name="Luftfilter", ID=4, CategoryID = 3}, 
     new SubCategories{Name="Ohlfilter", ID=5, CategoryID = 3}, 
     new SubCategories{Name="Sonstige", ID=6, CategoryID = 4}, 
     new SubCategories{Name="Wasserpumpe", ID=7, CategoryID = 5} 
     }; 

     subCategories.ForEach(s => context.SubCategories.Add(s)); 
     context.SaveChanges(); 

Altought似乎evrything是確定的,有關單位總是空,甚至在include(),爲空。

我試着這樣說:

Models.Categories entity = db.Categories.Where(m => m.ID == 3) 
            .Include(m => m.SubCategories) 
            .FirstOrDefault(); 

但entity.SubCategories總是空。

與還包括相關的實體是空

var setting = (from s in db.Categories.Include("SubCategories") 
          where s.ID == 3 
          select s).FirstOrDefault(); 

在我的項目我有更多的相關實體,其中延遲加載工作。

只有這些模型(分類和子類)我有問題。 我做錯了什麼?

回答

2

你的問題在你自己SubCategories model.You要解決這個問題,如下圖所示。

注:上it.Hence使用public virtual Categories Categories { get; set; }你沒有這樣做,EF不知道如何從數據庫中,當您使用Include或懶惰loading.And也獲取相關實體(或導航屬性)您需要將CategoryID更改爲CategoriesID.B'cos您的型號名稱爲Categories

public class SubCategories 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

    [ForeignKey("CategoriesID")] 
    public virtual Categories Categories{ get; set; }//you have to do this 
    public int CategoriesID { get; set; } 

    public string LinkToProducts { get; set; } 
    } 
+0

哦..我已經更新了我的回答:) – Sampath

0

試試這個:

public class SubCategories 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    [ForeignKey("CategoryID")] 
    public Categories Category { get; set; } 
    public int CategoryID { get; set; } 
    public string LinkToProducts { get; set; } 
} 
0

你缺少在SubCategories類的導航屬性:

public virtual Categories Categories { get; set; } 
0

看來,我解決我的問題,通過修改子類別模型外鍵,從類別編號到CategoriesID。 :) 謝謝您的回答!

相關問題