如何在EF核心中设置主键的外键

让我们想象我有一个实体 Car ,我正在建立一个表来替换没有车的汽车,让我们称之为 CarSwap 的女巫只是一个表有2列,一列带有我们拥有的CarId,另一列取代了我们的CarId。

Class CarSwap{
  public int CarId { get; set; }
  public int ReplacerId { get; set; }
  public Car Car { get; set; }
}

2辆车可能被同一辆车取代, 但一辆车只能换一辆车

所以我认为代表这个的代码是:

public void Configure(EntityTypeBuilder<CarSwap> builder)
{
   builder.HasKey(c => new { c.CarId }); // Key because one car can only be replaced by one car
   builder.Property(c => c.CarId ).ValueGeneratedNever();

   builder.HasOne(e => e.Car).WithOne().HasForeignKey(typeof(CarSwap),"CarId").isrequired();
   builder.HasOne(e => e.Car).WithMany().HasForeignKey(a => a.ReplacerId).isrequired(); // Because the replacer can replace multiple cars
}

生成迁移时,此代码为ReplacerId而不是CarId创建正确的外键。

如何使它生成正确的外键,以使其不允许我添加不存在的汽车?

funnydoing 回答:如何在EF核心中设置主键的外键

现在我已经意识到自己的愚蠢错误。我没有图要更换的汽车。 我已通过将其更改为以下方式对其进行了修复:

Class CarSwap{
  public int CarId { get; set; }
  public int ReplacerId { get; set; }
  public Car Car { get; set; }
  public Car Replacer { get; set; }
}

然后更改:

builder.HasOne(e => e.Car).WithMany().HasForeignKey(a => a.ReplacerId).IsRequired(); // Because the replacer can replace multiple cars

收件人:

builder.HasOne(e => e.Replacer).WithMany().HasForeignKey(a => a.ReplacerId).IsRequired(); // Because the replacer can replace multiple cars
本文链接:https://www.f2er.com/3110762.html

大家都在问