Entity framework 在实体框架延迟加载模式下,父类别始终为空

Entity framework 在实体框架延迟加载模式下,父类别始终为空,entity-framework,lazy-loading,Entity Framework,Lazy Loading,它加载类别,但始终使用空父级。我想获取具有给定ID的层次结构类别 public static Category GetCategory(System.Guid ID, ActionLinkInfo AInfo) { Category category = null; using (TIKSN.STOZE.Data.StozeContext DContext = new Data.StozeContext())

它加载类别,但始终使用空父级。我想获取具有给定ID的层次结构类别

public static Category GetCategory(System.Guid ID, ActionLinkInfo AInfo)
        {
            Category category = null;

            using (TIKSN.STOZE.Data.StozeContext DContext = new Data.StozeContext())
            {
                var cats = from cat in DContext.Categories where cat.ID == ID select cat;

                foreach (Data.Category Cat in cats)
                {
                    category = new Category(Cat, Cat.Parent == null ? null : GetCategory(Cat.Parent.ID, AInfo), AInfo);
                }
            }

            return category;
        }
试试这个:

var cats = from cat in DContext.Categories.Include("Parent") where cat.ID == ID select cat;
或者,您可以更改模型,将该
ParentID
作为整数包含在
类别中
类:

public class Category {

    /* (...) */

    public int ParentID { get; set; }

    [ForeignKey("ParentID")]
    public Category Parent { get; set; }
}
这样,您就可以获得
Cat.ParentID
,而无需从数据库中加载整个
父对象。

尝试以下操作:

var cats = from cat in DContext.Categories.Include("Parent") where cat.ID == ID select cat;
或者,您可以更改模型,将该
ParentID
作为整数包含在
类别中
类:

public class Category {

    /* (...) */

    public int ParentID { get; set; }

    [ForeignKey("ParentID")]
    public Category Parent { get; set; }
}

有了它,您就可以获得
Cat.ParentID
,而无需从数据库加载整个
Parent
对象。

解决方案是显式请求加载父对象

public static Data.Entity.Category GetCategory(long ID)
    {
        Data.Entity.Category category;

        using (Data.StozeContext DContext = new Data.StozeContext())
        {
            var categories = from SingleCategory in DContext.Categories.Include("Parent") where SingleCategory.ID == ID select SingleCategory;

            category = categories.Single();
        }

        return category;
    }

解决方案是显式请求加载父级

public static Data.Entity.Category GetCategory(long ID)
    {
        Data.Entity.Category category;

        using (Data.StozeContext DContext = new Data.StozeContext())
        {
            var categories = from SingleCategory in DContext.Categories.Include("Parent") where SingleCategory.ID == ID select SingleCategory;

            category = categories.Single();
        }

        return category;
    }

但这不是惰性负载。这是一个渴望的负载,但不是懒惰的负载。这是急件。