C# 实体框架4.1:使用TPH并将属性映射到现有数据库列

C# 实体框架4.1:使用TPH并将属性映射到现有数据库列,c#,ef-code-first,code-first,entity-framework-4.1,C#,Ef Code First,Code First,Entity Framework 4.1,我得到了这个简单的类层次结构 public class A { [Key] public int Id { get; set; } } public class B : A { public string Name { get; set; } } public class C : A { public string Name { get; set; } } 使用TPH,upp将以类似于这样的表格结束 表A,字段Id,名称,名称1,鉴别器 我希望B类和C类的name属性

我得到了这个简单的类层次结构

public class A 
{  
 [Key]
 public int Id { get; set; }
}  

public class B : A 
{
 public string Name { get; set; }
}

public class C : A 
{
 public string Name { get; set; }
}
使用TPH,upp将以类似于这样的表格结束

表A,字段Id,名称,名称1,鉴别器

我希望B类和C类的name属性使用这些映射映射到同一个字段,即name

Property(x => x.Id)
  .HasColumnName("Id");

Map<B>(m =>
{
    m.Properties(p => new
    {
        Name = p.Name,
    });
});

Map<C>(m =>
{
    m.Properties(p => new
    {
        Name = p.Name,
    });
});
属性(x=>x.Id)
.姓名(“Id”);
地图(m=>
{
m、 属性(p=>new
{
名称=p.名称,
});
});
地图(m=>
{
m、 属性(p=>new
{
名称=p.名称,
});
});

如何确保我的子类型(B和C)属性名映射到同一列?是否有要与Properties集合一起使用的HasColumnName

THP不允许在对象之间共享属性,除非该属性位于基类上。使用TPH,属性要么在所有实现之间共享,要么属于其中一个专用实现


将Name属性放在基类上,这应该可以解决您的问题。

这可能会很麻烦,因为我真正的问题涉及更多具有不同属性的子类。。。但无论如何,我意识到我必须走TPT的道路,以最好的方式满足我的要求。