Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架获取外键_C#_Linq_Entity Framework - Fatal编程技术网

C# 实体框架获取外键

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

我在数据库中的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类上的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的列为空。