如何使用 .Include 查询强制外连接 Entity Framework 6
How to force outer join with .Include query Entity Framework 6
我的数据模型如下。 UserPhone
是必需的,但导航 属性 是可选的,只要 User
的 table 可以为空:
public class Request
{
[Key]
public int Id {get;set;}
[Required]
public string UserPhone {get;set;}
[ForeignKey("UserPhone")]
public virtual User User {get;set;}
}
public class User
{
[Key]
public string UserPhone {get;set;}
}
User
s table 在请求输入系统后填充。在输入请求和未填充用户之间的某处,我正在尝试获取用户的所有请求(如果存在)(外部连接)。
db.Requests.Include(r=>r.User).FirstOrDefault();
这给我零结果,因为 EF 进行了内部连接(我的 UserPhone
字段已定义并且外键是请求 table 所必需的)。
如何正确定义映射才能使用包含映射?我需要 include
因为我的案例涉及更多 table 我想通过手动连接完成所有操作
它 INNER JOIN
因为您已将 FK 属性 配置为 [Required
]。因此,从 EF 的角度来看,相关的 User
记录应该始终存在。
如果不是这样,则表示您的模型和数据库不同步。从 Request.UserPhone
属性 中删除 [Required
] 注释,你就完成了。
更新: EF 严重依赖于通过约定、数据注释和流畅配置提供的模型元数据。所有的决定都是基于这些信息做出的。例如,当您根据需要配置持久原语 属性 时,查询中针对 属性 的所有 null
检查都将被删除,并在查询转换时解析为常量 [=16] =] 或 false
。这同样适用于关系。内部查询(Include
是一个特定的查询结构)它们被 EF 使用来确定连接的基数和连接的 type。查询one关系时,FK的Required
/ Optional
属性控制是INNER
还是LEFT OUTER
连接生成。
因此,控制 EF 行为的唯一方法是为其提供来自实体模型的正确元数据。无法动态控制/更改特定操作的行为。
我的数据模型如下。 UserPhone
是必需的,但导航 属性 是可选的,只要 User
的 table 可以为空:
public class Request
{
[Key]
public int Id {get;set;}
[Required]
public string UserPhone {get;set;}
[ForeignKey("UserPhone")]
public virtual User User {get;set;}
}
public class User
{
[Key]
public string UserPhone {get;set;}
}
User
s table 在请求输入系统后填充。在输入请求和未填充用户之间的某处,我正在尝试获取用户的所有请求(如果存在)(外部连接)。
db.Requests.Include(r=>r.User).FirstOrDefault();
这给我零结果,因为 EF 进行了内部连接(我的 UserPhone
字段已定义并且外键是请求 table 所必需的)。
如何正确定义映射才能使用包含映射?我需要 include
因为我的案例涉及更多 table 我想通过手动连接完成所有操作
它 INNER JOIN
因为您已将 FK 属性 配置为 [Required
]。因此,从 EF 的角度来看,相关的 User
记录应该始终存在。
如果不是这样,则表示您的模型和数据库不同步。从 Request.UserPhone
属性 中删除 [Required
] 注释,你就完成了。
更新: EF 严重依赖于通过约定、数据注释和流畅配置提供的模型元数据。所有的决定都是基于这些信息做出的。例如,当您根据需要配置持久原语 属性 时,查询中针对 属性 的所有 null
检查都将被删除,并在查询转换时解析为常量 [=16] =] 或 false
。这同样适用于关系。内部查询(Include
是一个特定的查询结构)它们被 EF 使用来确定连接的基数和连接的 type。查询one关系时,FK的Required
/ Optional
属性控制是INNER
还是LEFT OUTER
连接生成。
因此,控制 EF 行为的唯一方法是为其提供来自实体模型的正确元数据。无法动态控制/更改特定操作的行为。