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的道路,以最好的方式满足我的要求。