C# 实体框架获取外键
我在数据库中的to表之间有1:n关系:Employee(1):Role(n) 角色具有名为IdeEmployee的foreignKey 我想创建一个linq语句,它将获得给定客户的每个角色。我想做这样的东西:C# 实体框架获取外键,c#,linq,entity-framework,C#,Linq,Entity Framework,我在数据库中的to表之间有1:n关系:Employee(1):Role(n) 角色具有名为IdeEmployee的foreignKey 我想创建一个linq语句,它将获得给定客户的每个角色。我想做这样的东西: var myQuery = from r in Role where r.idEmployee == someId select r; 但是,r没有IdeEmployee属性!如何获取外键的值?使用Employee类上的inclu
var myQuery = from r in Role
where r.idEmployee == someId
select r;
但是,r没有IdeEmployee属性!如何获取外键的值?使用Employee类上的include方法返回所有相关角色:
var myQuery = from e in Employees.Include(emp => emp.Roles)
where e.EmployeeId == someId
select e
如果您至少正在使用
EF4.0
,这将为您提供所需的:
如果您使用的是EF1.0
,您的问题会更严重,因为它不会在模型中显示外键。您需要遍历EntityKey.EntityKeyValues
集合以搜索有效值。但我认为这只能得到外键的值,在查询中不起作用(因为EF不知道如何将其转换为SQL查询)
但既然您有外键,为什么不直接使用NavigationProperty
导航到Employee
实体并检查其中的值呢
var myQuery = from r in Role
where r.Employee.idEmployee == someId
select r;
如果您使用EF 4.0(.NET 4.0)和带有EDMX模型(可视化设计器)的数据库优先编程模型,则在向EDMX模型添加表时,需要确保选中“在模型中包含外键列”选项:
如果未选中此选项,则EF 4.0的行为将与EF 1.0/3.5(在.NET 3.5中)相同,这将包括一个导航属性-但不将外键列作为一个单独的列。确保正确创建关系并刷新实体框架模型(图),然后它将显示哪个列是否在外键中?@AMgdy关系正常,我刷新它。没有。您使用的是哪个版本的实体框架??NET 3.5中的EF根本没有显示外键-EF 4.0允许您这样做-但在创建模型时必须检查此选项,但有时r.Employee为null,尽管该员工在表中有ideEmployee。如何解决此问题?如果
r.Employee
为空,这意味着角色
未分配给任何员工
,前提是您已在数据库上正确设置外键。如果是这种情况,那么您的角色
对象将idEmployee
设置为null
。没有别的办法。您可以检查数据库架构,查看Role
table是否允许引用Employee
table的列为空。