Entity Framework 关联第二 table
Entity Framework relate second table
我怎样才能流利地 api 关联下面的 table?
我需要通过 LinkTable
获取第二个 table 数据,它存储 Main
和 Second
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 中,您可以找到更多关于如何加载不同级别的示例。
我怎样才能流利地 api 关联下面的 table?
我需要通过 LinkTable
获取第二个 table 数据,它存储 Main
和 Second
tables.
这是我的模型:
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 中,您可以找到更多关于如何加载不同级别的示例。