让我们想象我有一个实体 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创建正确的外键。
如何使它生成正确的外键,以使其不允许我添加不存在的汽车?
答案 0 :(得分:0)
现在我已经意识到自己的愚蠢错误。我没有图要更换的汽车。 我已通过将其更改为以下方式对其进行了修复:
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