同一类中的OneToOne反向属性是可能的吗?怎么样?

时间:2013-12-15 16:29:04

标签: c# entity-framework code-first entity-framework-6

我的这个类有以下反向属性:

public class Person
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public int FatherId { get; set; }
    [ForeignKey("FatherId")]
    public Person Father { get; set; }

    public int MotherId { get; set; }
    [ForeignKey("MotherId")]
    public Person Mother { get; set; }
}

很抱歉,如果这是一个重复的问题,但我无法解决并理解这一点。

尝试创建数据库时,我收到错误消息:

  

无法确定类型'TestEFInverseProperty.Person'和'TestEFInverseProperty.Person'之间关联的主要结束。必须使用关系流畅API或>数据注释显式配置>此关联的主要结尾。

请问,我该如何解决?

如果这不是建立这种关系的最佳方式,你如何建议我?

1 个答案:

答案 0 :(得分:1)

我认为您必须同时将FatherIdMotherId设为System.Nullable<int>。您拥有它的方式,Person除非同时包含FatherMother,否则FatherMother都必须{ {1}}和Father,依此类推。在某些时候,您必须停止并允许系统拥有Mother而没有PersonFather,这意味着您的外键需要可以为空。

此外,您的导航属性应标记为Mother

以下是使用流畅API进行操作的方法:

virtual

以上是告诉EF,关系的public class Person { public int Id { get; set; } public string Name { get; set; } public int? FatherId { get; set; } public virtual Person Father { get; set; } public int? MotherId { get; set; } public virtual Person Mother { get; set; } } public class PersonTypeConfiguration : EntityTypeConfiguration<Person> { public PersonTypeConfiguration() { HasOptional(x => x.Mother).WithMany().HasForeignKey(x => x.MotherId); HasOptional(x => x.Father).WithMany().HasForeignKey(x => x.Father); } } Mother方是主要目标,而子Father位于依赖端。这是因为给定任何一对多关系,许多方面是主体,而一方是依赖方。如果这种关系对同一实体具有反身性(或者说是反向性),则无关紧要。