LINQ加入EF导航属性

时间:2014-03-20 18:57:51

标签: asp.net-mvc linq entity-framework

我已经阅读了很多关于如何在LINQ连接语句中使用实体框架导航属性的内容,但我仍遇到问题。我可以使它在Where子句中工作,但不能作为连接。

如果我的交叉参考表存在于EF并且不仅仅是导航属性,那么我的LINQ会是什么样子:

var status = (from a in context.Beamtime_Request_Statuses
              join b in context.Proposal_Types_Beamtime_Request_Statuses on a.Status equals b.Beamtime_Request_Status
              where b.Proposal_Type_ID == proposalTypeID && a.Order > currentStatusOrder
              orderby a.Order
              select a.Status).FirstOrDefault();

所以问题是表Proposal_Types_Beamtime_Request_Statuses不会成为实体,只是导航属性,因为该表只包含Proposal_Type_ID和Beamtime_Request_Status列,它们都是此表中其他表和外键的主键。

如果有人可以告诉我如何使用Proposal_Types_Beamtime_Request_Statuses作为导航属性的相应表示法来编写LINQ语句,那将非常感激。

1 个答案:

答案 0 :(得分:1)

您与纯联结表有多对多关联(只有两个外键,都包含表的主键)。默认情况下,Entity Framework不会将此类表映射到类。您可以这样离开并查询多对多关联,如下所示:

from a in context.Beamtime_Request_Statuses
where a.Proposal_Types.Any(pt => pt.Proposal_Type_ID == proposalTypeID)
   && a.Order ... (rest of the query)

(假设Beamtime_Request_Status有一个属性Proposal_Types,因为EF默认会创建。)

或者您可以强制EF将表映射为类。 Here's一种应该有用的方法。您还可以向联结表添加一个列,从数据库更新模型并再次删除该列(如果它恰好是一个有用的列,则将其保留在那里)。

相关问题