首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架关联第二表

实体框架关联第二表
EN

Stack Overflow用户
提问于 2016-01-30 01:37:15
回答 1查看 65关注 0票数 1

如何用fluent api把下面的表格联系起来?

我需要通过LinkTable获取第二个表数据,后者存储MainSecond表的ids。

以下是我的模特:

代码语言:javascript
复制
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; }
}

我的地图是这样的:

代码语言:javascript
复制
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);

并试图获取数据:

代码语言:javascript
复制
MyDBContext.MainTable.Include("LinkTable").FirstOrDefault();

当我试图预先使用LinkTable获取SecondTable数据时,我得到了一个错误:

对象引用未设置..。

代码语言:javascript
复制
 @foreach (var item in Model.LinkTable)
 {
     <p>@item.SecondTable.ID</p>
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 01:46:15

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

代码语言:javascript
复制
public class MainTable
{

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

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

代码语言:javascript
复制
MyDBContext.MainTable.Include(mt=>mt.LinkTable).FirstOrDefault();

现在,如果您想加载另一个级别,在本例中是SecondTable,您可以这样做:

代码语言:javascript
复制
MyDBContext.MainTable.Include(mt=>mt.LinkTable.Select(lt=>lt.SecontTable)).FirstOrDefault();

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35097006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档