我对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; }
}
因此,每个分类都有更多的子类别。 在Seed方法中我填充了数据库,所以我有数据:
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没问题,相关实体总是为null,即使包含Include(),也是null。
我试过这种方式:
Models.Categories entity = db.Categories.Where(m => m.ID == 3)
.Include(m => m.SubCategories)
.FirstOrDefault();
但是entity.SubCategories总是为空。
with Include,相关实体也为空
var setting = (from s in db.Categories.Include("SubCategories")
where s.ID == 3
select s).FirstOrDefault();
在我的项目中,我有更多相关实体,其中延迟加载正在运行。
只有这些模型(类别和子类别)我才有问题。 我做错了什么?
答案 0 :(得分:3)
您的问题出在您的SubCategories
型号上。您必须解决此问题,如下所示。
注意:在其上使用public virtual Categories Categories { get; set; }
。因为你没有这样做,EF不知道如何从数据库中获取相关实体(或导航属性)使用Include
或延迟加载。您还需要将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; }
}
答案 1 :(得分: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; }
}
答案 2 :(得分:0)
您缺少SubCategories
类中的导航属性:
public virtual Categories Categories { get; set; }