如何在实体框架中使用外键建立关系,该外键指向具有不同数量属性的主键作为主键

问题描述 投票:0回答:1
modelBuilder.Entity<Vehicle>()
            .HasOne(vehicle => vehicle.Driver)
            .WithOne(driver => driver.Vehicle)
            .HasForeignKey<Driver>(fk => fk.SSN)
            .HasPrincipalKey<Vehicle>(fk => new { fk.ChassisNr, fk.LicensePlate});

我有一堂课

Vehicle
,其中
chassisnumber
licenseplate
组合为PK。

还有一个以

Driver
作为主键的
SSN
类。

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

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

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

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

c# .net entity-framework
1个回答
0
投票

您需要在依赖实体上创建与主体实体的主键匹配的外键。您想成为哪个实体的主要实体和从属实体取决于您。对于主体

Driver
和从属
Vehicles, you would add 
SSN
to
Vehicle
.  For the setup you have in your question where 
Vehicle
is the principal, you would need to add the two properties that make up
Vehicle
’s PK to 
Driver`,然后在定义 FK 时创建一个匿名对象:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.