如何在实体框架中与指向具有不同属性数的主键的外键建立关系

How to make a relation in Entity Framework with foreign keys that point to primary keys with a different number of properties as the primary key

提问人:Unorthodox 提问时间:11/11/2023 最后编辑:marc_sUnorthodox 更新时间:11/11/2023 访问量:29

问:

modelBuilder.Entity<Vehicle>()
            .HasOne(vehicle => vehicle.Driver)
            .WithOne(driver => driver.Vehicle)
            .HasForeignKey<Driver>(fk => fk.SSN)
            .HasPrincipalKey<Vehicle>(fk => new { fk.ChassisNr, fk.LicensePlate});

我有一个带有 A 和组合作为 PK 的类。Vehiclechassisnumberlicenseplate

还有一个类是主键。DriverSSN

现在,当我尝试添加此迁移时,我收到以下消息:

在实体类型“Driver”上为外键 {'SSN'} 指定的属性数与实体类型“Vehicle”上的主键 {'ChassisNr', 'LicensePlate'} 中的属性数不匹配

有没有可能实现我正在做的事情?

我需要这两个模型之间的 0/1 到 0/1 关系。

C# .NET 实体框架

评论

0赞 GotStu 11/11/2023
我猜你在某个地方有这个?modelBuilder.Entity<Vehicle>() 中。HasKey(v => new { v.ChassisNr, v.LicensePlate });
0赞 Unorthodox 11/11/2023
是的,我愿意。 以及这个 modelBuilder.Entity<Driver>()。哈斯基(d => d.SSN);

答:

0赞 Moho 11/11/2023 #1

您需要在依赖实体上创建一个与主体实体的主键匹配的外键。您希望哪个实体成为委托人和从属实体取决于您。对于主体和从属 ,应将 添加到 。对于您在问题中的设置,其中主体在哪里,您需要添加构成 PK 的两个属性,然后在定义 FK 时创建一个匿名对象:DriverVehicleSSNVehicleVehicleVehicleDriver

.HasForeignKey<Driver>( d => new 
{ 
    d.ChassisNr, 
    d.LicensePlate
} );

https://learn.microsoft.com/en-us/ef/core/modeling/relationships/one-to-one