postgresql - 错误:添加外键 - 在表“X”上插入或更新违反外键约束“FK_X_Y_Z”
问题描述
我正在尝试使用 ForeignKey 更新数据库表。
在 Departures 我有“AirportCode”列。在航班内,我有“DepartureAirportCode”列。我试图将 DepartureAirportCode 添加为 ForeignKey。
我得到了这个错误。
失败:
Microsoft.EntityFrameworkCore.Database.Command[20102] 未能执行 DbCommand (213ms) [Parameters=[], CommandType='Text', CommandTimeout='300'] ALTER TABLE "Flight" 添加约束 "FK_Flight_Departures_DepartureAirportCode" FOREIGN KEY ("DepartureAirportCode" ) 在删除 CASCADE 时引用“Departures”(“AirportCode”);执行 DbCommand 失败 (213ms) [Parameters=[], CommandType='Text', CommandTimeout='300'] ALTER TABLE "Flight" ADD CONSTRAINT "FK_Flight_Departures_DepartureAirportCode" FOREIGN KEY ("DepartureAirportCode") REFERENCES "Departures" ("AirportCode")删除级联;Npgsql.PostgresException (0x80004005): 23503: 在表“Flight”上插入或更新违反外键约束“
消息文本:
在表“Flight”上插入或更新违反了外键约束“FK_Flight_Departures_DepartureAirportCode” 详细信息:表“Departures”中不存在键 (DepartureAirportCode)=()。
更新:解决了这个问题。我的数据库出发表数据的问题。谢谢
解决方案
只有主键或备用(或主)键可以用作外键。我强烈建议您使用 Departure 主键 ID 作为外键。您可以尝试配置一个替代键,但我看不出让您的数据库结构更加复杂的意义。如果将来 AirportCode 发生变化,您将在 db 更新方面遇到非常大的问题。这就是为什么在大多数数据库中使用独立键的原因。
public class Flight
{
[Key]
public int Id { get; set; }
[Required]
public int? DepartureId{ get; set; }
public Departure Departure { get; set; }
}
但如果您仍然想要航班中的出发代码,则不需要保留 2 把钥匙。最简单的方法是将出发代码作为主要代码
public class Departure
{
[Key]
public string Code { get; set; }
[InverseProperty(nameof(Flight.Departure))]
public IEnumerable<Flight> Flights { get; set; }
}
public class Flight
{ [Key]
public int Id { get; set; }
public string DepartureCode { get; set; }
[ForeignKey(nameof(DepartureCode))]
[InverseProperty("Flights")]
public virtual Departure Departure { get; set; }
}
你不需要这个,因为你有属性注释。但以防万一
modelBuilder.Entity<Flight>(entity =>
{
entity.HasOne(d => d.Departure)
.WithMany(p => p.Flights)
.HasForeignKey(d => d.DepartureCode);
});
推荐阅读
- java - word2003中如何使用POI获取表格信息?
- reactjs - 如何在lib选项卡中获取选择选项卡
- reactjs - expo react native firestore 查询自动生成的文档ID
- java - 给定一个固定长度的整数数组 arr,复制每个出现的零,并将它们向右移动 - leetCode
- maven - 我们可以在 config.yaml 中的圆形 CI 中创建和运行 sonarqube 服务器吗
- heroku - 该站点在 localhost 中运行良好,但在 heroku 上部署时出现错误。error-TypeError: OAuth2Strategy 需要一个 clientID 选项
- python-3.x - 总结多个excel行
- javascript - 如何在 stackblitz 中安装丢失的软件包?
- jquery - 如何使用 Thymeleaf 和 JQuery 绑定动态子列表?
- postgresql - Postgresql - 根据条件选择列