代码之家  ›  专栏  ›  技术社区  ›  Stephen Jennings

选择实体不会再选择关联实体

  •  1
  • Stephen Jennings  · 技术社区  · 16 年前

    我正在学习ASP.NET MVC(通常是MVC),我在网上找到的所有帮助都只演示如何使用单个表,而不是多个表之间的关系。我正在运行一个我期望的查询,它也应该返回关联的实体,但它不是,并且不能找出我缺少的是什么。谢谢你的帮助!

    我有以下数据:

    Ticket
       TicketID  CompanyID  Subject  ...
       --------  ---------  -------
       1         1          "stuff"
       2         1          "things"
    
    Company
       CompanyID  Name      ...
       ---------  --------
       1          "FredCo"
    

    所以每一张票都与一个特定的公司相连。我正在尝试为票据创建详细信息视图,并希望显示公司名称。这是我目前设置的。

    模型

    Ticket 实体与A Company 实体,并且存在一个名为 CompanyTicket 他们之间。导航属性为ticket.company和company.tickets。

    在关联的映射详细信息中,我有:

    Maps to Ticket
        Company.CompanyID <-> CompanyID
        Ticket.TicketID   <-> TicketID
    

    控制器

    我的ticketcontroller.details方法如下:

    public ActionResult Details( int id )
    {
        var tickettoview = ( from m in _db.Ticket
                             where m.TicketID == id
                             select m ).First();
        return View( tickettoview );
    }
    

    编辑 :经过马克·汉密尔顿的建议,我意识到问题是我的疑问。在返回上放置断点表明 tickettoview 从未有过客户。所以这缩小了范围,但我仍然不确定如何填充company属性。

    再次感谢!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Stephen Jennings    16 年前

    马特的回答给了我这个问题所需要的词汇,并最终把我带到 this page . 添加 .Include("Company") 在我的数据集中填充了Company属性。

    var tickettoview = ( from t in _db.Ticket.Include("Company")
                         where t.TicketID == id
                         select t ).First();
    
        2
  •  1
  •   Community CDub    8 年前

    这听起来和我问的问题一样 this question . 见 answer I posted 这描述了我是如何修复它的。

    我使用的是linq-to-sql,而不是linq-to-entities,但我假设dataloadOptions和loadWith方法(或类似的方法)仍然有效。如果我错了,那么对实体框架更了解的人可以纠正我。