Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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#_Entity Framework_Linq_Entity Framework 6 - Fatal编程技术网

C# 为什么我的一对零一关系总是与实体框架产生内部连接?

C# 为什么我的一对零一关系总是与实体框架产生内部连接?,c#,entity-framework,linq,entity-framework-6,C#,Entity Framework,Linq,Entity Framework 6,我的分类声明如下: [Table("Profil")] public class Profil { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] [Column("CodeUtilisateur")] [MaxLength(25)] public string UtilisateurId { get; set; } public string Nom { get; set; } p

我的分类声明如下:

[Table("Profil")]
public class Profil
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("CodeUtilisateur")]
    [MaxLength(25)]
    public string UtilisateurId { get; set; }

    public string Nom { get; set; }

    public string Prenom { get; set; }

    [ForeignKey("UtilisateurId")]
    public virtual User User { get; set; }
}

[Table("vwADUser")]
public class User
{
    [Key]
    public string UserName { get; set; }

    [Column("Mail")]
    public string Email { get; set; }
}
这是我的linq查询

var query = from profil in icDbContext.Profils
            select new
            {
                profil.Nom,
                profil.Prenom,
                profil.UtilisateurId,
                UserEmail = profil.User != null ? profil.User.Email : ""
            };

var result = query.ToList();
发送到数据库的查询将生成与视图[dbo].[vwADUser]的内部联接

SELECT 
    1 AS [C1], 
    [Extent1].[Nom] AS [Nom], 
    [Extent1].[Prenom] AS [Prenom], 
    [Extent1].[CodeUtilisateur] AS [CodeUtilisateur], 
    [Extent2].[Mail] AS [Mail]
    FROM  [ic].[Profil] AS [Extent1]
    INNER JOIN [dbo].[vwADUser] AS [Extent2] ON [Extent1].[CodeUtilisateur] = [Extent2].[UserName]
我也尝试过这个查询,得到了相同的结果

var query = from profil in icDbContext.Profils
            join user in icDbContext.Users on profil.UtilisateurId equals user.UserName into gusers
            from guser in gusers.DefaultIfEmpty()
            select new 
            {
                profil.Nom,
                profil.Prenom,
                profil.UtilisateurId,
                UserEmail = guser != null ? guser.Email : ""
            };

var result = query.ToList();
我尝试使用此命令的几个变体手动配置关系,但没有成功

modelBuilder.Entity<Profil>()
    .HasOptional(x => x.User)
    .WithOptionalDependent();
modelBuilder.Entity()
.has可选(x=>x.User)
.使用OptionalDependent();
您知道如何配置我的关系以生成左连接而不是内部连接吗?

请尝试以下方法:

[Table("Profil")]
public class Profil
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("CodeUtilisateur")]
    [MaxLength(25)]
    public string UtilisateurId { get; set; }

    public string Nom { get; set; }

    public string Prenom { get; set; }

    public virtual User User { get; set; }
}

[Table("vwADUser")]
public class User
{
    [Key]
    [ForeignKey("Profil")]
    public string UserName { get; set; }

    [Column("Mail")]
    public string Email { get; set; }

    public virtual Profil Profil {get;set;}
}
这就是你如何流利地完成它:

modelBuilder.Entity<Profil>()
  .HasOptional(x => x.User) // User is optional for Profil
  .WithRequired(z=>z.Profil); // but Profil is required for User
modelBuilder.Entity()
.HasOptional(x=>x.User)//用户对于Profil是可选的
.WithRequired(z=>z.profile);//但用户需要Profil

您的类似乎缺少一些字段。您的外键SQL列是什么数据类型?(是否允许空值)数据类型是一个字符串,它是UsilizateUrid属性。此列是该表的键,但也是另一个表的外键。而官方文档中的左外连接示例对您不起作用?我试过了,但还是遇到了同样的内部连接问题。我已经更新了描述以添加此示例。它起作用了。我必须反转外键声明。但请告诉我,是否可以在两侧都有可选关系,或者我必须根据需要至少声明一侧?我不确定,因为我从未需要实现0..1:0..1关系。多对多,是的。