我有以下问题:我有一个使用继承的实体层次结构。我在两个子实体中有两个相同的字段(名称和类型相同)。当我尝试在项目上“更新数据库 - 强制”时,EF5抱怨已经有一个名为X的列。
EF5生成表的方式是它实际生成单个表并将基本实体的所有字段加上派生实体的所有字段。
是否有办法从属性名称强制使用不同的数据库列名。 有没有其他解决方案(我知道复制数据可能是架构问题,但这种常见会引入更复杂的数据库层次结构,我不想使用它)。
感谢:)
答案 0 :(得分:2)
这可以通过两种方式之一完成,可以使用类属性上的 Fluent API 或属性属性。
[Column("ColumnName")]
public string PropertyName
{
get;
set;
}
有关列属性的详细信息,请参阅MSDN - ColumnAttribute Class。
否则,请使用Fluent API。在您的上下文类中 -
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<YourClass>().Property(yc => yc.PropertyName).HasColumnName("ColumnName");
有关此方法的更多信息,请参阅MSDN - HasColumnName extension method。
由Baximilian联系的article将有助于更多地了解这一点。
答案 1 :(得分:0)
如果我理解正确,您需要在DB for field中更改列名,这样您就可以使用ColumnAttribute。
您可以找到更多信息here