我有一个名为Driver的实体,为了获得一个驱动程序列表,我打电话给:
List<Driver> drivers = _context.Drivers.Select(x=>x);
驱动程序可以有详细信息,它们是它们之间的外键,但我不能这样做:
List<Driver> drivers = _context.Where(x=>x.id == id && x.Detail.id == detailId);
如何在Where子句中找到我的外键属性?
我正在使用Entity Framework 3.5
。
声明有效,虽然我不确定(x =&gt; x)是否必要,但我实际上并没有编译它:
List<Driver> drivers = _context.Drivers.Select(x=>x);
问题是Driver
实体与Detail
有外来关系,Driver
有一个DetailId
列,它是Detail表的外键,因为我我正在使用Entity Framework 3.5,我无法访问Driver.Detail.Id
或Driver.DetailId
。他们没有出现。我确实读过关于EF 3.5
不包括外键然后在EF 4
中进行选择的内容,但我暂时在EF 3.5
。
我确实尝试过.Include("Detail")
,但它给了我一些关于Detail not being a navigation property.
的例外
答案 0 :(得分:0)
在您的案例中使用Include
方法。参考MSDN
答案 1 :(得分:0)
我不熟悉EF 3.5,但也许你可以像这样解决它:
context.drivers.Where(x => x.Detail ==
context.Details.FirstOrDefault(d => d.Id == detailId))
答案 2 :(得分:0)
由于_context.Where()
不是_context
,您无法IQueryable<Driver>
。
请尝试_context.Drivers.Where()
。
您最好的线索是关于Detail
不是导航属性的错误消息;尝试向Driver
实体添加一个 - 如果它是1个驱动程序:许多细节:
public virtual ICollection<Detail> Details { get; set; }
如果是1个驱动程序:1个细节:
public virtual Detail Detail { get; set; }
在.dbml中,您可以使用关联指定;如果您从现有数据库导入模型,则FK应该已作为 associations 导入,但如果它们没有(或者如果数据库没有定义它们),您可以随时手动添加它们。 / p>
使用导航属性,EF应该可以评估类似的内容:
var driversWithDetails = _context.Drivers
.Where(x => x.Id == id && x.Detail.Id == detailId)
.Include (x => x.Detail).ToList();