我见过类似的问题;但没有一个相同;没有人帮助过我。我希望迁移使用不同的列名称,而不是我的类中的属性。在内置类型上,我可以使用[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]
似乎被忽略的一个很好的理由?
答案 0 :(得分:0)
public virtual Employee Owner { get; set; }
未映射到DB,它未在数据库中表示。它由Entity Framework自动填充,以方便您使用。 Employee_Id - 这是存储在DB中的内容。实体框架使用Employee_Id字段来创建Owner对象。因此,在这种情况下,Emplyee_Id不是冗余的,它是强制性的并且它在DB中具有物理表示,但是所有者字段是类的逻辑部分,由实体框架管理而在DB中没有它的列。有意义吗?