实体框架7的奇怪行为

时间:2016-01-14 22:03:39

标签: c# sql-server asp.net-mvc entity-framework-core

我使用的是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没有?

他们的代码非常相似。

解决这个问题的方法是什么?

0 个答案:

没有答案