C# 延迟加载不工作,相关实体始终为空

C# 延迟加载不工作,相关实体始终为空,c#,entity-framework,C#,Entity Framework,我对EF有问题。 重新分配的实体始终为空。到目前为止,我还没有找到任何解决方案 以下是模型: public class Categories { public int ID { get; set; } public string Name { get; set; } public int AtpID { get; set; } public virtual ICollection<SubCategories> SubCategories { ge

我对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; }
  }
但entity.SubCategories始终为空

如果包含,则相关实体为空

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

在我的项目中,我有更多的相关实体,在这些实体中,延迟加载正在发挥作用

只有这些模型(类别和子类别)才有问题。 我做错了什么?

试试这个:

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; }
}

您的问题出在您的
子类别上。您必须按如下所示解决此问题

注意:在其上使用
公共虚拟类别{get;set;}
。因此您没有这样做,EF不知道如何获取相关实体(或导航属性)当您使用
包括
或延迟加载时,从数据库中删除。此外,您还需要将
类别ID
更改为
类别ID
。因为您的模型名称为
类别

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; }
  }

子类别
类中缺少导航属性:

public virtual Categories Categories { get; set; }

通过将子类别模型中的外键从CategoryId更改为categoresid,似乎解决了我的问题。
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; }
  }
public virtual Categories Categories { get; set; }