在 EF Core 中为一对一关系定义具有特定列名称的实体

Defining entity with specific column name for a one-to-one relation in EF Core

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

我有一个类似于这种情况的实体之间的关系

我有一个 City 属于 State。所以它是从 CityState.

的一对一关系

这是一个例子

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; }
}

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

Table City:

IdCity | StateIdState | ....

Table State:

 IdState | ... | ...

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

我尝试使用不同的注释,如 FK、列等,但没有用,它总是生成那个名称。

有没有一种方法可以省略列名第一部分所附实体的名称?

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

你有一个错误,添加 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 会自动提供相同的名称。仅当您希望列名不同于 属性 名称时才需要它。

在之前的解决方案中,我添加了以下注释以保持实体和外键同步。

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

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

现在我的数据库模式是正确的。