注意:我认为这在技术上仍然是代码优先,但我也有一个现有的数据库,所以我不会即时生成模型或数据库(没有 .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) : error 0019: Each property name in a type must be unique. Property name 'Description_Title' was already defined.
例如:
B.description.title 映射到“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);
}
}
关于c# - 如何将子类属性映射到每个层次结构的表中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231173/