c# - 延迟加载不起作用,相关实体始终为空

标签 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 { 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; }
  }

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

虽然看起来一切正常,相关实体始终为空,即使使用 Include() 也是空的。

我这样试过:

Models.Categories entity = db.Categories.Where(m => m.ID == 3)
                                   .Include(m => m.SubCategories)
                                   .FirstOrDefault();

但 entity.SubCategories 始终为 null。

Include 相关实体也为 null

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

enter image description here

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

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

最佳答案

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

注意:使用public virtual Categories Categories { get;放; } 上。因此你没有这样做,当你使用 Include 或延迟加载时,EF 不知道如何从数据库中获取相关实体(或导航属性)。您还需要将 CategoryID 更改为 CategoriesID。因为您的模型名称是 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; }
  }

关于c# - 延迟加载不起作用,相关实体始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40604959/

相关文章:

entity-framework - Entity Framework 、DbSet<T>、Dispose() 性能问题

c# - 动态获取照片?

c# - 如何在 ASP.NET Core MVC 的自定义记录器中正确实现 ILogger.IsEnabled()

c# - 如何在 Azure 辅助角色中生成安全随机数?

c# - EF6 Code First 和通过注释映射,如何构建配置?

entity-framework - ASP.NET MVC 4 ModelState 在传递 key 时无效

c# - 如何将现有实体附加到通用的 Entity Framework 上下文?

c# - 防止在 ASP.NET MVC 和 Entity Framework 中更新未更改的值

c# - 我们如何使用 MVC 和 EntityFramework 中的下拉列表显示数据库的表名?

c# - 在不使用其他项目的情况下添加 Entity Framework 核心迁移