延迟加载不起作用,相关实体始终为null

Ors*_*rsi 5 c# entity-framework

我对EF有问题。已实现的实体始终为null。到目前为止,我还没有任何解决方案。

这些是模型:

 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; }
  }
Run Code Online (Sandbox Code Playgroud)

因此,每个类别都有更多的子类别。在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();
Run Code Online (Sandbox Code Playgroud)

看来一切都可以,即使Include()也不变,相关实体始终为null。

我这样尝试:

Models.Categories entity = db.Categories.Where(m => m.ID == 3)
                                   .Include(m => m.SubCategories)
                                   .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但是entity.SubCategories始终为null。

与Include也相关的实体为null

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

在此处输入图片说明

在我的项目中,我有更多相关的实体,延迟加载在其中工作。

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

Sam*_*ath 3

您的问题出在您的SubCategories模型上。您必须如下所示修复该问题。

注意:使用public virtual Categories Categories { get; set; }它。因此你没有这样做,当你使用Include或延迟加载时,EF不知道如何从数据库获取相关实体(或导航属性)。而且你还需要更改CategoryIDCategoriesID.B'因为你的模特名字是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; }
  }
Run Code Online (Sandbox Code Playgroud)