我已经读了很多关于如何在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_requestrongtatus没有成为一个实体,只有一个导航属性,因为表只包含列Proposal_Type_ID和Beamtime_Request_Status,这两个列都是该表中其他表的主键和外键。
如果有人能告诉我如何写LINQ语句使用适当的符号与proposal_types_beamtime_requestrongtatus作为导航属性,这将是非常感激的。
您正在与纯连接表(只有两个外键,它们都包含表的主键)进行多对多关联。默认情况下,实体框架不会将这样的表映射到类。您可以保持这种方式,并像这样查询多对多关联:
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将表映射为一个类。这是一个应该有效的方法。您还可以向连接表添加一个列,从数据库中更新模型,然后再次删除该列(或者如果它恰好是一个有用的列,则将其保留在那里)。