Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 实体框架0..1到0关系_C#_Entity Framework_Foreign Keys - Fatal编程技术网

C# 实体框架0..1到0关系

C# 实体框架0..1到0关系,c#,entity-framework,foreign-keys,C#,Entity Framework,Foreign Keys,第二个可以包含第一个的一个实例(取决于某种用法属性)。第一个不包含第二个的任何实例。只有当外键也是依赖实体的主键时,才可能存在一对一关系。因此,正确的映射是: this.HasOptional(s => s.First) .WithOptionalDependent() .WillCascadeOnDelete(false); 原因是要在数据库中强制执行一对一关系,外键必须在第二个实体中唯一。但实体框架不支持唯一的键——EF的唯一唯一值是主键。这是EF的局限性 上介绍了解

第二个可以包含第一个的一个实例(取决于某种用法属性)。第一个不包含第二个的任何实例。

只有当外键也是依赖实体的主键时,才可能存在一对一关系。因此,正确的映射是:

this.HasOptional(s => s.First)
    .WithOptionalDependent()
    .WillCascadeOnDelete(false);
原因是要在数据库中强制执行一对一关系,外键必须在
第二个
实体中唯一。但实体框架不支持唯一的键——EF的唯一唯一值是主键。这是EF的局限性


上介绍了解决方法。解决方法基于将关联映射为一对多,并通过在自定义数据库初始值设定项中引入唯一约束来强制数据库中的唯一性。

如果您试图实现一对一关系,其中最多只有一个
第二个
实体与
第一个
实体关联,如果没有反向属性,请尝试以下操作:

class First
{
    [Key]
    public int Id { get; set; }
}

class Second
{
    [Key, ForeignKey("First")]
    public int Id { get; set; }
    public First First { get; set; }
}

用EF语言说:它不应该是可选的:可选的关系,在关系的另一端没有导航属性吗?一旦你把FK放在PK上,它就不能是可选的-PK必须定义,因为需要具有相同PK值的主体实体。我编辑了我的帖子,以更详细地描述我的问题。请注意。我检查了您以前的代码,它创建了一对多relation@LadislavMrnka-您知道有什么方法可以用DatabaseFirst方法进行这种“黑客攻击”吗?还是只有流畅的映射才有可能?请注意我在上面Ladislav Mrnkas答案中的评论。
class First
{
    [Key]
    public int Id { get; set; }
}

class Second
{
    [Key, ForeignKey("First")]
    public int Id { get; set; }
    public First First { get; set; }
}
class First
{
    [Key]
    public Guid FirstId { get; set; }
}

class Second
{
    [Key]
    public Guid FirstId { get; set; }
    public First First { get; set; }
}

class SecondMapping : EntityTypeConfiguration<Second>
{
    public SecondMapping()
    {
        this.HasRequired(s => s.First);
    }
}
class SecondMapping : EntityTypeConfiguration<Second>
{
    public SecondMapping()
    {
        this.HasRequired(s => s.First).WithMany().HasForeignKey("First_id");
    }
}