实体代码第一个零或一到零或一关系

Posted

技术标签:

【中文标题】实体代码第一个零或一到零或一关系【英文标题】:Entity code first zero or one to zero or one relationship 【发布时间】:2015-09-29 15:10:41 【问题描述】:

管理Entity code first 0 or one to zero or one relationship的解决方案是什么?

我想在这两个实体上拥有一个导航属性。

我已经用数据注释进行了测试:

public class class1()

    public int Id get;set;
    public virtual Class2 Class2 get;set;


public class class2()

    public int Id get;set;
    public int? Class1Id get;set;
    [Required, ForeignKey("Class1Id")]
    public Class1 Class1 get;set;

我总是有一条错误消息:“Class1_Class2_Target: : Multiplicity is not valid in Role 'Class2_Class1_Target' in relationship 'Class2_Class1'. 因为从属角色属性不是关键属性,所以从属角色的多重性上限必须是 '*'"。

我找到了具有流畅 API 的示例,但如果可能的话,我想使用数据注释。事实上,对于所有使用 fluent api 的示例,都有一个导航属性,但 int 外键已从类中删除:

class Class1Map : EntityTypeConfiguration<Class1>

    public Class1Map()
    
        this.HasKey(c => c.Id);
        this.Property(c => c.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.HasRequired(c1 => c1.Class2).WithRequiredPrincipal(c2 => c2.Class1);
    


public class Class1()

    public int Id get;set;
    public virtual Class2 Class2 get;set;


public class Class2()

    public int Id get;set;
/* Missing Class2Id Property */
    public virtual Class1 Class1 get;set;

【问题讨论】:

一个非常常见的问题:到目前为止你尝试了什么? 为了帮助您自己的研究,这种类型的关系可以称为 Optional-to-Optional 【参考方案1】:

关于这方面的文章有很多,所以我建议你在问这些一般性问题之前先阅读this 文章和谷歌。

【讨论】:

以上是关于实体代码第一个零或一到零或一关系的主要内容,如果未能解决你的问题,请参考以下文章

一对零或一关系实体框架

EF 代码优先 - 配置一对零或一关系,无需共享 PK/FK

用于一对零或一关系的实体框架 (EF) 代码优先级联删除

在 SQL Server 中实现一对零或一关系

使用 EF7 映射一对零或一

使用 CodeFirst 的 C# 一对零或一关系