如何将子类属性映射到每个层级表中的列
本文关键字:子类 属性 映射 | 更新日期: 2023-09-27 18:06:51
注意:我认为这在技术上仍然是代码优先的,但我也有一个现有的数据库,所以我没有在飞行中生成模型或数据库(no .edmx)。
我有一个TPH情况,其中子类具有特定于它们的字段。我为基类定义了一个EntityTypeConfiguration
。如何将子类特定的字段映射到数据库表中的列?
public class Letter
{
public string Name { get; set; }
}
public class A : Letter
{
public int quantity { get; set; }
}
public class B : Letter
{
public ComplexType description { get; set; }
}
public class LetterMap : EntityTypeConfiguration<Letter>
{
HasKey...
}
这是EF 4.1。
编辑:我已经实现了Eranga下面建议的解决方案。我现在的问题是两个子类将不同的值映射到同一列。(第三个子类根本不填充列,这就是为什么我可以将属性向上移动一个级别)。
例如:B.description.title映射到列"Description_Title"(59,6):错误0019:类型中的每个属性名称必须是唯一的。属性名称'Description_Title'已定义。
,
C.description.shortTitle映射到同一列使Letter
类抽象
public abstract class Letter
{
public string Name { get; set; }
}
public class LetterMap : EntityTypeConfiguration<Letter>
{
public LetterMap()
{
HasKey(l => l.Id);
//assuming discriminator column is "Type"
Map<A>(a => a.Requires("Type").HasValue<byte>(1));
Map<B>(b => b.Requires("Type").HasValue<byte>(2));
}
}
public class BMap : EntityTypeConfiguration<B>
{
public LetterMap()
{
HasOptional(b => b.description)
WithMany()
HasForeignKey(b=> b.descriptionId);
}
}