c# - EFCore 在一对一关系上生成的列名无效
问题描述
我正在尝试在我的上下文类中设置一对一的外键关系,但我不断收到以下错误。我发现了一个类似的帖子,但这似乎并没有解决我的问题,因为我在模型中明确指定了关系。我确认:
- 服务器对象引用了一个 ServerList 对象(公共虚拟 ServerList 对象)
- ServerList 对象通过(公共虚拟服务器对象)引用回服务器(导航属性??)
我试图通过ForeignKey("ServerId")
在 ServerList.ServerName 列中添加注释来解决这个问题,但这没有用。为什么 EFCore 尝试创建此列?为什么 ForeignKey 注释没有解决问题?
列名“ServerListServerName”无效。
我的上下文类:
modelBuilder.Entity<Server>(entity =>
{
entity.HasOne(d => d.ServerList)
.WithOne(p => p.AwsServer)
.HasForeignKey<Server>(d => d.ServerName);
});
服务器.cs:
public partial class Server
{
[Key]
public int ServerId { get; set; }
public string ServerName { get; set; }
public virtual ICollection<PockAdvCompany> Companies { get; set; }
public virtual ParentServer ParentServer { get; set; }
public virtual ServerList ServerList { get; set; }
}
服务器列表.cs:
public partial class ServerList
{
public virtual ICollection<PockAdvCompany> Companies { get; set; }
public virtual Server AwsServer { get; set; }
[Key,Column("ServerId")]
public string ServerName { get; set; }
}
解决方案
这是因为 yourForeignKey("ServerId")
不是 in 的属性,ServerList
而是 in 的属性Server
它应该是将该类指向其父级的属性的名称。FK inServerList
也是string
,但 PK 是int
试试这个
public partial class ServerList
{
public virtual ICollection<PockAdvCompany> Companies { get; set; }
public virtual Server AwsServer { get; set; }
[ForeignKey("AwsServer")]
public int ServerId { get; set; }
}
希望这有帮助
推荐阅读
- linux - AWS EC2 packet_write_wait:连接到 UNKNOWN 端口 65535:管道损坏
- ruby-on-rails - 添加新测试时,以前工作测试的权限被拒绝
- javascript - 问:在自执行功能中,谁被分配了数字 10
- windows - 浏览到我的自定义本地 HTTPS 服务器时如何避免无效证书警告?
- android - 如何使用 Kotlin 过滤 RecyclerView?
- javascript - React 类型号 textInput 替换逗号
- html - 如何对齐表格中的两列 | HTML 电子邮件签名
- amazon-dynamodb - 我可以在二级索引中查询 DynamoDB 中的值列表吗?
- mysql - 如何使用 Powershell 从主机到运行 MySQL 服务器的容器执行文件中的 MySQL 命令?
- java - 使用未弃用的模块修改 AsyncTask 方法