首页 > 解决方案 > 如何使用通用存储库模式获取所有子集合?

问题描述

我正在使用 EF Core 2.1,并且我的域中有这些类。

public class HomeSection2
{
    public HomeSection2()
    {
        HomeSection2Detail = new List<HomeSection2Detail>();
    }

    public Guid ID { get; set; }
    public string Title { get; set; }
    public string Header { get; set; }

    public List<HomeSection2Detail> HomeSection2Detail { get; set; }
}

public class HomeSection2Detail
{
    public Guid ID { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Link { get; set; }
    public int? Sequence { get; set; }

    public HomeSection2 HomeSection2 { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.RemovePluralizingTableNameConvention();

    //HomeSection2
    modelBuilder.Entity<HomeSection2>().HasKey(s => s.ID);
    modelBuilder.Entity<HomeSection2>().Property(s => s.ID).ValueGeneratedOnAdd();
    modelBuilder.Entity<HomeSection2>().Property(s => s.Title).IsRequired();
    modelBuilder.Entity<HomeSection2>().Property(s => s.Header).IsRequired();

    //HomeSection2Detail
    modelBuilder.Entity<HomeSection2Detail>()
        .HasOne(p => p.HomeSection2)
        .WithMany(b => b.HomeSection2Detail);
    modelBuilder.Entity<HomeSection2Detail>().HasKey(s => s.ID);
    modelBuilder.Entity<HomeSection2Detail>().Property(s => s.ID).ValueGeneratedOnAdd();
    modelBuilder.Entity<HomeSection2Detail>().Property(s => s.Title).IsRequired();
    modelBuilder.Entity<HomeSection2Detail>().Property(s => s.Sequence).IsRequired();
}

我有一个通用的回购

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
    protected readonly DbContext Context;

    public Repository(DbContext context)
    {
        Context = context;
    }

    public IEnumerable<TEntity> GetAll()
    {
        return Context.Set<TEntity>().ToList();
    }
}

当我像这样GetAll从应用程序调用时var obj = _uow.HomeSection2s.GetAll(),它不会填充详细信息。

标签: c#entity-frameworkasp.net-coreasp.net-core-mvc

解决方案


您的意思被称为“延迟加载”。这将要求您将这些属性设为虚拟,例如:

public virtual List<HomeSection2Detail> HomeSection2Detail { get; set; }

你也可以看看这个anwser

有关加载相关数据的更多文档


推荐阅读