我使用的是ASP.NET 5和Entity Framework 7,并且遇到了一种奇怪的行为。
问题概述:我有一些模型:
程序
章节包含类别
当我尝试访问Categories
中的Sections
时,一切正常:
var section = repository.Sections.First(x => x.ID == sectionId);
model.Name = section.Name;
model.Categories = section.Categories;
但是当我尝试访问Procedures
中的Category
时,我会得到一个空列表:
var category = repository.Categories.First(x => x.ID == categoryId);
model.Name = category.Name;
model.Procedures = category.Procedures;
奇怪的是:当我在前面的代码之后添加这一行时,一切正常:
var tmp = repository.Procedures.Where(x => x.CategoryId == category.ID).ToList();
我正在使用SQL Server 2014 Express
为什么会这样?
我的模特:
(注意: ID
中定义了AbstractModel
字段)
栏目
[Table("sections")]
public class Section:AbstractModel
{
// ... some unimportant fields
// Relations
public ICollection<Category> categories;
public ICollection<PriceCategory> priceCategories;
public virtual ICollection<Category> Categories
{
get { return this.categories ?? (this.categories = new List<Category>()); }
set { categories = value; }
}
public virtual ICollection<PriceCategory> PriceCategories
{
get { return this.priceCategories ?? (this.priceCategories = new List<PriceCategory>()); }
set { priceCategories = value; }
}
}
分类
[Table("categories")]
public class Category : AbstractCategory
{
/// <summary>
/// Relation with section
/// </summary>
public virtual Section Section { get; set; }
public int SectionID { get; set; }
// Relation with procedures
private ICollection<Procedure> procedures;
public virtual ICollection<Procedure> Procedures
{
get { return this.procedures ?? (this.procedures = new List<Procedure>()); }
set { procedures = value; }
}
}
程序
[Table("procedures")]
public class Procedure : AbstractProcedure
{
// Relation with cateogry
public virtual Category Category { get; set; }
public int CategoryID { get; set; }
public int CategoryID { get; set; }
}
我认为延迟加载的问题,但我不知道,如何解决它。
这很奇怪 - 为什么Category
加载得很好,但Procedure
没有?
他们的代码非常相似。
解决这个问题的方法是什么?