我使用与此类似的数据结构,其中动物类型是根据表中的鉴别器列确定的:
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 {}
Mapping:
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
and Farm_Id1
- 此外FarmId
- 每种动物类型一个)。
this.HasOptional(t => t.Farm)
.WithMany(t => t.Pigs)
.HasForeignKey(d => d.FarmId)
将导航属性从Animal
继承模型的模型会导致生成一个附加列 -FarmId1
(所以比上面两个更接近我想要的!)
有什么办法可以实现这一点吗?
我不是 EF 专家,但从模型优先方法中我知道这将被映射为 Animal 的集合,然后您可以选择Farm.Animals.OfType<Pig>()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)