注意:我认为这在技术上仍然是代码优先的,但我也有一个现有的数据库,所以我不是动态生成模型或数据库(没有.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建议的解决方案below。我现在的问题是两个子类将不同的值映射到同一列。 (第三个子类根本没有填充列,这就是我可以将属性向上移动一级的原因)。
(590,6):错误0019:类型中的每个属性名称必须是唯一的。 已定义属性名称“Description_Title”。
例如:
B.description.title映射到“Description_Title”列
,而
C.description.shortTitle映射到同一列
答案 0 :(得分:2)
使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);
}
}