在实体框架代码优先迁移中选择列的名称

时间:2014-01-17 05:40:37

标签: c# entity-framework ef-migrations

我见过类似的问题;但没有一个相同;没有人帮助过我。我希望迁移使用不同的列名称,而不是我的类中的属性。在内置类型上,我可以使用[Column("newName")]执行此操作。但是,当我想要一个外键到另一个类时,这不起作用。

换句话说,这很好用:

[Column("NameInDB")]
public string NameInCode { get; set; }

但这根本不起作用:

[Column("Employee_Id")]
public virtual Employee Owner { get; set; }

在第二种情况下,迁移仍然将列创建为Owner_Id;它完全忽略了Column注释。是否存在某些地方,它表示Column注释仅适用于内置类型?我找不到任何相关的东西。

我知道可以使用[ForeignKey]注释来执行此操作,但是如果我这样做,我必须在我的代码中有一个我不想要的额外属性:

[ForeignKey("Employee_Id")]
public virtual Employee Owner { get; set; }

public int Employee_Id { get; set; }

我不想这样做,因为在这种情况下Employee_Id属性是多余的;我宁愿只使用Owner属性。有没有解决这个问题的方法,或者[Column]似乎被忽略的一个很好的理由?

1 个答案:

答案 0 :(得分:0)

public virtual Employee Owner { get; set; }未映射到DB,它未在数据库中表示。它由Entity Framework自动填充,以方便您使用。 Employee_Id - 这是存储在DB中的内容。实体框架使用Employee_Id字段来创建Owner对象。因此,在这种情况下,Emplyee_Id不是冗余的,它是强制性的并且它在DB中具有物理表示,但是所有者字段是类的逻辑部分,由实体框架管理而在DB中没有它的列。有意义吗?