C# 在实体框架代码首次迁移中选择列的名称

C# 在实体框架代码首次迁移中选择列的名称,c#,entity-framework,entity-framework-migrations,C#,Entity Framework,Entity Framework Migrations,我见过类似的问题;但没有一个完全相同;没有人帮过我。我希望迁移使用与类中属性不同的列名称。在内置类型上,我可以使用[Column(“newName”)]实现这一点。但是,当我需要另一个类的外键时,这不起作用 换句话说,这很好: [Column("NameInDB")] public string NameInCode { get; set; } 但这根本不起作用: [Column("Employee_Id")] public virtual Employee Owner { get; set;

我见过类似的问题;但没有一个完全相同;没有人帮过我。我希望迁移使用与类中属性不同的列名称。在内置类型上,我可以使用
[Column(“newName”)]
实现这一点。但是,当我需要另一个类的外键时,这不起作用

换句话说,这很好:

[Column("NameInDB")]
public string NameInCode { get; set; }
但这根本不起作用:

[Column("Employee_Id")]
public virtual Employee Owner { get; set; }
在第二种情况下,迁移仍然将列创建为Owner_Id;它完全忽略列注释。是否有地方说列注释只适用于内置类型?我找不到关于那个的任何东西

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

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

public int Employee_Id { get; set; }

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

公共虚拟员工所有者{get;set;}
未映射到DB,它未在数据库中表示。为方便起见,它由实体框架自动填充。Employee_Id-这是存储在DB中的内容。实体框架使用Employee_Id字段创建所有者对象。因此,Emplyee_Id在这种情况下不是多余的,它是强制性的,并且在DB中有物理表示,但所有者字段是类的逻辑部分,由实体框架管理,在DB中没有它的列。有道理吗?

有道理;除了所有我的类关系都只有父类实例作为属性,而不是int(ID)属性。比如,Employee有一个公司属性,它是Company类的一个实例。我没有任何公司Id财产;EF似乎正在将其映射到数据库中的公司Id。