我在数据库中的表之间有1:n的关系:Employee(1):Role(n) role的foreignKey名为idEmployee
我想创建一个linq语句,它将获得给定客户的每个角色。我想做这样的事情:
var myQuery = from r in Role
where r.idEmployee == someId
select r;
但是,r没有idEmployee属性!如何获取外键的值?
答案 0 :(得分:2)
如果您使用的是EF 4.0(.NET 4.0)和带有EDMX模型的数据库优先编程模型(可视化设计器),那么您需要确保在选择Include foreign key columns in the model
选项时将表添加到EDMX模型中:
如果您没有选中此选项,那么EF 4.0将与EF 1.0 / 3.5(在.NET 3.5中)的行为相同,即包含导航属性 - 但不外国键列作为单独的列。
答案 1 :(得分:1)
如果您至少使用EF4.0
,这将为您提供所需内容:Foreign keys in Entity Framework
如果您正在使用EF1.0
,则问题会更严重,因为它不会在模型中显示外键。您需要遍历EntityKey.EntityKeyValues
集合以搜索有效值。但我认为这只会让你获得外键的价值而不会在查询中起作用(因为EF不知道如何将它翻译成SQL查询)。
但是既然你有外键,为什么不用NavigationProperty
导航到Employee
实体并检查那里的值?
var myQuery = from r in Role
where r.Employee.idEmployee == someId
select r;
答案 2 :(得分:0)
在Employee类上使用include方法来恢复所有相关角色:
var myQuery = from e in Employees.Include(emp => emp.Roles)
where e.EmployeeId == someId
select e