C# 如何强制外部联接。包含查询实体框架6
我的数据模型如下C# 如何强制外部联接。包含查询实体框架6,c#,.net,entity-framework,entity-framework-6,outer-join,C#,.net,Entity Framework,Entity Framework 6,Outer Join,我的数据模型如下UserPhone是必需的,但导航属性是可选的,只要User的表可以为空: 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 Us
UserPhone
是必需的,但导航属性是可选的,只要User
的表可以为空:
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;}
}
将请求输入系统后,将填充用户
s表。在输入请求和未填充用户之间的某个地方,我正在尝试使用一个用户获取所有请求,如果存在(外部连接)
这给了我零结果,因为EF没有内部联接(myUserPhone
字段已定义,并且请求表需要一个外键)
如何正确定义映射以使用include映射?我需要
包含
,因为我的案例涉及多个表,我想用手动联接来完成所有工作它确实是内部联接
,因为您已将FK属性配置为[必需的
]。因此,从EF的角度来看,相关的用户
记录应该始终存在
如果不是这样,则表示您的模型和数据库不同步。从Request.UserPhone
属性中删除[Required
]注释,就完成了
更新:EF严重依赖于通过约定、数据注释和流畅配置提供的模型元数据。所有的决定都是根据这些信息做出的。例如,当您根据需要配置持久化原语属性时,查询中针对该属性的所有null
检查将被删除,并在查询转换时解析为常量true
或false
。这同样适用于关系。内部查询(而Include
是一个特定的查询构造)EF使用它们来确定联接的基数和联接的类型。查询关系的一侧时,FK的Required
/Optional
属性控制是生成内部
还是左外部
联接
因此,控制EF行为的唯一方法是从实体模型向其提供正确的元数据。无法动态控制/更改特定操作的行为。我提到,我的数据模型是根据需求定义的。我的
request
表要求定义userPhone
(必需)。同时用户表不要求用户在场(外部联接)。所以问题是如何告诉EF不要做内部连接。我已经告诉过你了。您的业务/领域模型需求是什么并不重要。EF“实体”模型表示存储模型和FK关系,因此应反映数据库表NULL
/notnull
和FK约束。这是EF要求,如果您不遵守它(lie-EF),不要期望EF为您生成正确的查询。我已经告诉过您了
-不,您没有。您的回答证实了当我声明这是我的需求时,我应该更新我的数据模型。当您确认这是EF要求时,注释中的答案更有意义。啊,对不起(英语不是我的自然语言)-我认为这很明显:)对不起,让我想想如何更好地表达它。
db.Requests.Include(r=>r.User).FirstOrDefault();