Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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# 如何强制外部联接。包含查询实体框架6_C#_.net_Entity Framework_Entity Framework 6_Outer Join - Fatal编程技术网

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没有内部联接(my
UserPhone
字段已定义,并且请求表需要一个外键)


如何正确定义映射以使用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();