我在我的代码优先项目 (EF5) 中使用“每个类型的表”层次结构。我的派生类覆盖了默认的主键名称,以便从数据库的角度清楚地识别这种关系,如下所示:
/* change primary keys to Chair.ProductId and Table.ProductId */
modelBuilder.Entity<Chair>()
.Property(x => x.Id)
.HasColumnName("ProductId");
modelBuilder.Entity<Table>()
.Property(x => x.Id)
.HasColumnName("ProductId");
使用以下类作为示例:
[Table("Product")]
public class Product
{
public int Id {get; set;}
/* generic product properties */
}
[Table("Chair")]
public class Chair : Product
{
/* specific chair properties */
}
[Table("Table")]
public class Table : Product
{
public virtual ICollection<Chair> Chairs {get; set;}
/* specific table properties */
}
这会导致属性 Table.Chairs 出现以下错误:指定为此 MSL 的一部分的列“Id”在 MetaDataWorkspace 中不存在。
我有点理解,因为 EF 可能没有看到椅子产品的 PK 发生了变化。(并且仍然假设它被称为“Id”)但我无法弄清楚我如何指示 EF 使用备用键。
谢谢,
PS。是的,我知道,如果我不更改 PK 的名称,它可以工作......但是可以使用 EF Fluent API 来完成吗?