[英]Entity Framework Code First Two navigationProperty to/from one abstract entity
[英]entity framework code first - Union of the two fields into one collection
我有这个型号和配置
public class Person
{
public int? FatherId { get; set; }
public virtual Person Father { get; set; }
public int? MotherId { get; set; }
public virtual Person Mother { get; set; }
public virtual List<Person> Childs { get; set; }
}
class PersonConfiguration : EntityTypeConfiguration<Person>
{
public PersonConfiguration()
{
HasOptional(e => e.Father).WithMany(e => e.Childs)
.HasForeignKey(e => e.FatherId);
HasOptional(e => e.Mother).WithMany(e => e.Childs)
.HasForeignKey(e => e.MotherId);
}
}
我得到这个类型是初始的错误。
指定的架构无效。 错误:(151,6):错误0040:在名称空间ExamModel(Alias = Self)中未定义类型Person_Father。
有没有办法通过两个属性(motherId和fatherId)映射Childs
属性?
无法将两个导航属性映射到单个集合属性。 它看起来很嘲笑,但你必须有两个集合属性
public class Person
{
public int? FatherId { get; set; }
public virtual Person Father { get; set; }
public int? MotherId { get; set; }
public virtual Person Mother { get; set; }
public virtual List<Person> ChildrenAsFather { get; set; }
public virtual List<Person> ChildrenAsMother { get; set; }
}
class PersonConfiguration : EntityTypeConfiguration<Person>
{
public PersonConfiguration()
{
HasOptional(e => e.Father).WithMany(e => e.ChildrenAsFather)
.HasForeignKey(e => e.FatherId);
HasOptional(e => e.Mother).WithMany(e => e.ChildrenAsMother)
.HasForeignKey(e => e.MotherId);
}
}
谢谢你,Eranga,你的回复正是我所需要的!
另外,如果有人使用该方法而不是Eranga使用的配置方法,这里是modelBuilder代码。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().
HasKey(i => i.PersonId);
modelBuilder.Entity<Person>().
HasOptional(f => f.Father).
WithMany(f => f.ChildrenAsFather).
HasForeignKey(f => f.FatherId);
modelBuilder.Entity<Person>().
HasOptional(m => m.Mother).
WithMany(m => m.ChildrenAsMother).
HasForeignKey(m => m.MotherId);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.