在EF Core中填充许多导航属性

时间:2016-09-14 02:34:34

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

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

所以这是填充nav属性,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
    }

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

所以这将是null

model.SiteEducators.FirstOrDefault().Educator

这会返回一个值

model.SiteEducators.FirstOrDefault().EducatorId

我的意思是:

enter image description here

enter image description here

阵列上必须有某种“ThenInclude”吗?

我如何充实这个其他物体,什么是synatax,任何想法?

任何帮助都会很棒,那些人:)

1 个答案:

答案 0 :(得分:1)

好吧所以它看起来像是一系列git问题,这就是修复:

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".defineBybeldbAlles">


    <ListView
        android:id="@+id/BybelHoofstukListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="#ff303030"
        android:dividerHeight="1dp"
        android:layout_marginTop="21dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Boek naam:"
        android:id="@+id/boeknaambyhoofstuklys"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textColor="#000063"
        android:textSize="20dp" />


</RelativeLayout>

(旁注:Didnt将其复数,因为只有常规的许多设置生成的数据库表格没有多元化,不想复制任何内容以防万一)

2)现在,在初始查询之后,运行第二个查询以加载数据项。你不必将它们分配到EF应该只知道它们被加载到根对象

中的任何地方
public DbSet<SiteEducator> SiteEducator { get; set; }

问题是文档遗漏了映射链接表的重要部分,没有它似乎没有办法在List中加载嵌套对象。