我正在使用实体框架 4 CTP5 代码优先方法,并且我有一个按层次结构表 (TPH) 映射。我在层次结构中的一些类具有共同的属性。
public class BaseType
{
public int Id { get; set; }
}
public class A : BaseType
{
public string Customer { get; set; }
public string Order { get; set; }
}
public class B : BaseType
{
public string Customer { get; set; }
public string Article { get; set; }
}
public class C : BaseType
{
public string Article { get; set; }
public string Manufacturer { get; set; }
}
默认约定将其映射到以下列:
- ID
- 第1条
- 第二条
- 客户1
- 客户2
- 制造商
- 命令
- 类型
我想让 EF4 共享通用属性,最终得到以下结果:
- ID
- 文章
- 顾客
- 制造商
- 命令
- 类型
除了减少列数之外,这还具有能够基于 Article 搜索记录的优势,而无需知道哪些类型确切具有 Article 属性。
我尝试将每个公共属性映射到同一列:
modelBuilder.Entity<B>().Property(n => n.Article).HasColumnName("Article");
modelBuilder.Entity<C>().Property(n => n.Article).HasColumnName("Article");
但这引发了以下异常:
指定的架构无效。错误:(36,6):错误 0019:类型中的每个属性名称必须是唯一的。已定义属性名称“文章”。
有谁知道如何绕过这个验证规则?