Entity Framework 关联第二 table

Entity Framework relate second table

我怎样才能流利地 api 关联下面的 table?

我需要通过 LinkTable 获取第二个 table 数据,它存储 MainSecond tables.

的 ID

这是我的模型:

public class MainTable
{
        public int ID { get; set; }
        ...
        ...
        public ICollection<LinkTable> LinkTable { get; set; }
}

public class LinkTable
{
        public int ID { get; set; }
        ...
        ...
        public MainTable MainTable  { get; set; }
        public SecondTable SecondTable { get; set; }
}

public class SecondTable
{
        public int ID { get; set; }
        ...
        ...
        public ICollection<LinkTable> LinkTable { get; set; }
}

我是这样映射的:

HasRequired(t => t.MainTable).WithMany(t => t.LinkTable).HasForeignKey(t => t.MainTable_ID);
HasRequired(t => t.SecondTable).WithMany(t => t.LinkTable).HasForeignKey(t => t.SecondTable_ID);

并尝试获取数据:

MyDBContext.MainTable.Include("LinkTable").FirstOrDefault();

当我尝试通过 LinkTable 获取 SecondTable 数据时,我得到了一个错误:

Object reference not set...

 @foreach (var item in Model.LinkTable)
 {
     <p>@item.SecondTable.ID</p>
 }

为避免该异常,您需要在构造函数中初始化导航 属性:

public class MainTable
{

    public MainTable()
    {
      LinkTable=new List<LinkTable>();
    }
    public int ID { get; set; }
    ...
    ...
    public ICollection<LinkTable> LinkTable { get; set; }
}

此外,您可以使用 Include 扩展方法,它是强类型的并且可以避免您可能的 运行 时间异常:

MyDBContext.MainTable.Include(mt=>mt.LinkTable).FirstOrDefault();

现在如果你想加载另一个关卡,在本例中 SecondTable,你可以这样做:

MyDBContext.MainTable.Include(mt=>mt.LinkTable.Select(lt=>lt.SecontTable)).FirstOrDefault();

在我上面引用的 link 中,您可以找到更多关于如何加载不同级别的示例。