在 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
。所以它是从 City
到 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; }
}
问题是,如果我 运行 迁移然后持久化数据库更改,它会生成以下内容 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; }
}
现在我的数据库模式是正确的。
我正在尝试在我的实体中使用代码优先定义一些列名称。我正在使用 .NET Core 3.1、EF Core 3.1.15 和 MySQL 服务器。
我有一个类似于这种情况的实体之间的关系
我有一个 City
属于 State
。所以它是从 City
到 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; }
}
问题是,如果我 运行 迁移然后持久化数据库更改,它会生成以下内容 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; }
}
现在我的数据库模式是正确的。