首页 > 解决方案 > 在 EF Core 中为一对一关系定义具有特定列名的实体

问题描述

我正在尝试在我的实体中使用代码优先定义一些列名。我正在使用 .NET Core 3.1、EF Core 3.1.15 和 MySQL 服务器。

我在与这种情况类似的实体之间有关系

我有一个City属于一个StateCity所以从到是一对一的关系State

这是一个例子

public class City 
{
    [Column("IdCity")]
    public short IdCity { get; set; }
    [Column("IdState")] 
    public State State { get; set; }
   
}

public class State
{
    [Column("IdState")]
    public byte IdState { get; set; }
}

问题是,如果我运行迁移然后持久化数据库更改,它会生成下表

City

IdCity | StateIdState | ....

State

 IdState | ... | ...

我需要将该列StateIdState定义为IdState在物理数据库中。

我尝试使用不同的注释,如 FK、column 等,但它不起作用,它总是生成该名称。

有没有办法可以省略附加到列名第一部分的实体名称?

我这样做是因为我已经在服务器中创建了这两个表,所以我需要匹配它们的模式才能与它们交互。

标签: c#entityasp.net-core-3.1ef-core-3.1

解决方案


你有一个错误,添加 IdState 列并使用双引号

public class City {
   [Column("IdCity")]
   public short IdCity {get;set;}
   [Column("IdState")] 
   public byte IdState {get;set;}
   public virtual  State State {get;set;}
     ....

但您不需要任何列属性,因为 EF 会自动给出相同的名称。仅当您希望列名与属性名不同时才需要它。


推荐阅读