【问题标题】:Populating Many-Many Navigation Properties in EF Core在 EF Core 中填充多对多导航属性
【发布时间】:2016-09-15 12:00:15
【问题描述】:

我不确定如何在多->多关系的上下文中定义 Include(..).ThenInclude(...)。

所以这是填充导航属性,SiteEducators 是链接

var site = this._dbContext.Sites.Include(x => x.SiteEducators).FirstOrDefault();

根据文档定义

    public DbSet<Educator> Educators { get; set; }
    public DbSet<Site> Sites { get; set; }

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

        #region Site->Educator Link
        modelBuilder.Entity<SiteEducator>()
           .HasKey(t => new { t.SiteId, t.EducatorId });

        modelBuilder.Entity<SiteEducator>()
            .HasOne(pt => pt.Site)
            .WithMany(p => p.SiteEducators)
            .HasForeignKey(pt => pt.SiteId);

        modelBuilder.Entity<SiteEducator>()
            .HasOne(pt => pt.Educator)
            .WithMany(t => t.SiteEducators)
            .HasForeignKey(pt => pt.EducatorId);
        #endregion
    }

问题是如果我调试“站点”它有导航属性,我可以看到“EducatorId”的值很好,但它的导航属性到 Educator 为空。

所以这将是空的

model.SiteEducators.FirstOrDefault().Educator

这将返回一个值

model.SiteEducators.FirstOrDefault().EducatorId

我的意思的例子:

数组上一定有某种“ThenInclude”吗?

我如何充实这个其他对象,语法是什么,有什么想法吗?

任何帮助都会很棒,谢谢大家:)

【问题讨论】:

  • 你的模型代码也可以吗?
  • 当然,我会在我的手机上并且不能真的...但它直接从文档中取出。 docs.efproject.net/en/latest/modeling/…
  • 文档只是没有说明如何填充数据:/

标签: asp.net-core entity-framework-core


【解决方案1】:

好的,看起来这是一系列 git 问题,这是修复:

1) 在 ApplicationDbContext 中映射链接表对象。

public DbSet<SiteEducator> SiteEducator { get; set; }

(旁注:没有将其复数,因为仅从常规 Many 生成的 DB 表->Many 设置没有将其复数,不想复制任何内容以防万一)

2) 现在,在您的初始查询之后,运行第二个查询以加载数据项。您不必将它们分配到任何地方 EF 现在应该知道它们已加载到根对象中

var site = this._dbContext.Sites
               .Include(x => x.SiteEducators)
               .Include(x => x.Studies)
               .FirstOrDefault(x => x.SupervisorToken == key);


//Dummy query to load the data
this._dbContext.SiteEducator.Include(x => x.Educator).Where(x => x.SiteId == site.Id).Load();

问题是文档忽略了映射链接表的重要部分,没有似乎没有办法加载列表中的嵌套对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多