Поскольку это, естественно, отношения «один ко многим» (человек должен иметь одного отца и одну мать, но может иметь много сыновей и дочерей), я бы смоделировал это так:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasRequired(p => p.Father)
.WithMany();
modelBuilder.Entity<Person>()
.HasRequired(p => p.Mother)
.WithMany();
}
Это будетсоздайте два обязательных внешних ключа в таблице базы данных с именами Mother_ID
и Father_ID
по соглашению.
Редактировать
Если вы хотите иметь возможность создавать людей безМама и папа, вы можете сделать отношение необязательным вместо обязательного:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOptional(p => p.Father)
.WithMany();
modelBuilder.Entity<Person>()
.HasOptional(p => p.Mother)
.WithMany();
}
Тогда внешние ключи в таблице базы данных обнуляются.
Если вы этого не сделаетекак имена столбцов по умолчанию для ваших внешних ключей (Mother_ID
и Father_ID
), вы можете настроить имена столбцов в вашем отображении:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOptional(p => p.Father)
.WithMany()
.Map(m => m.MapKey("FatherID"));
modelBuilder.Entity<Person>()
.HasOptional(p => p.Mother)
.WithMany()
.Map(m => m.MapKey("MotherID"));
}