我使用类似于此,其中动物的类型是从表中的一个鉴别柱测定的数据结构:实体框架一对多映射TPH
public class Farm {
public int Id { get; set; }
public virtual ICollection<Pig> Pigs { get; set; }
public virtual ICollection<Cow> Cows { get; set; }
}
public class Animal {
public int Id { get; set; }
public int FarmId? { get; set; }
public virtual Farm Farm { get; set; }
public string Name { get; set; }
}
public class Pig : Animal {}
public class Cow : Animal {}
映射:
this.Map<Pig>(m => m.Requires("Type").HasValue((int) AnimalType.Pig));
this.Map<Cow>(m => m.Requires("Type").HasValue((int) AnimalType.Cow));
但我似乎无法确定猪,牛和农场之间的关系。我从FarmMap
这给了重复的列映射错误尝试这样做:
this.HasMany(t => t.Pigs)
.WithOptional(t => t.Farm)
.Map(m => m.MapKey("FarmId"));
this.HasMany(t => t.Cows)
.WithOptional(t => t.Farm)
.Map(m => m.MapKey("FarmId"));
从每个动物的映射也不管用,它会产生额外的列(如Farm_Id
和Farm_Id1
- 除了FarmId
- 。每个动物类型一个)。
this.HasOptional(t => t.Farm)
.WithMany(t => t.Pigs)
.HasForeignKey(d => d.FarmId)
从Animal
模型的继承机型移动导航属性会导致产生一个附加列 - FarmId1
(!那么一点点接近我想要比上述2)
有任何方式来实现这一目标?
你找到适合你的情况的任何解决方案,这就是我一直在寻找.. – c0demaster