实体框架获取外键

时间:2011-12-27 19:42:43

标签: c# linq entity-framework

我在数据库中的表之间有1:n的关系:Employee(1):Role(n) role的foreignKey名为idEmployee

我想创建一个linq语句,它将获得给定客户的每个角色。我想做这样的事情:

var myQuery = from r in Role 
              where r.idEmployee == someId
              select r;

但是,r没有idEmployee属性!如何获取外键的值?

3 个答案:

答案 0 :(得分:2)

如果您使用的是EF 4.0(.NET 4.0)和带有EDMX模型的数据库优先编程模型(可视化设计器),那么您需要确保在选择Include foreign key columns in the model选项时将表添加到EDMX模型中:

enter image description here

如果您没有选中此选项,那么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