我为一个出生证书的类建模,所以我需要包含父亲,母亲和孩子的三种类型的属性。
public class Person
{
public Guid PersonId { get; set; }
public string FirstName { get; set; }
public string LastName1 { get; set; }
public string LastName2 { get; set; }
[InverseProperty("Person")]
public virtual BirthCertificate BirthCertificate { get; set; }
}
这是我的班级BirthCertificate
public class BirthCertificate : EntityBase
{
public Guid BirthCertificateId { get; set; }
public string BirthCertificateNumber { get; set; }
public Guid PersonId {get;set;}
public Guid FatherPersonId {get;set;}
public Guid MotherPersonId {get;set;}
public Person Person { get; set; }
public Person Father{ get; set; }
public Person Mother { get; set; }
}
我还没有完全理解InverseProperty Annotation的使用,所以这个模式如下所示:
无法确定之间关联的主要结束 类型'人物'和' BirthCertificate'。这个的主要目的 必须使用以下任一方式显式配置关联 关系流畅的API或数据注释。
任何人都可以帮助我吗?
答案 0 :(得分:0)
您的反向属性使用是正确的,EF不知道哪个是已配置关系的主要结尾 - 也就是说,出生证明属于该人,还是该人属于出生证明? EF将使用它来确定插入顺序。通常它只使用任何具有可空FK的参与者,但你的两个FK都不可为空。
对导航属性使用数据注释[必需],或者使用流畅的API .HasRequiredPrincipal()。WithRequiredDependant();
答案 1 :(得分:0)
对于任何试图尝试与我相同的目标的人,我最终以这种方式解决了与Fluent的关系:
modelBuilder.Entity<BirthCertificate>()
.HasRequired(r => r.Person)
.WithMany()
.HasForeignKey(r => r.PersonId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<BirthCertificate>()
.HasRequired(r => r.Father)
.WithMany()
.HasForeignKey(r => r.FatherPersonId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<BirthCertificate>()
.HasRequired(r => r.Mother)
.WithMany()
.HasForeignKey(r => r.MotherPersonId)
.WillCascadeOnDelete(false);