使用 Fluent API 在两个表的备用键之间创建一对一关系

Use the Fluent API to create a one-to-one relationship between two tables' alternate keys

我正在尝试在两个数据库中加入两个 table,其中 table 具有自动递增、主键和字符串、备用键。每个系统 table 中的备用键已被填充以允许比较(合并)数据。

我有两个 类:

单位(系统A)

public class Unit
{
    [Key]
    public int ID { get; set; }
    // alternate key
    public string UnitNumber { get; set; }
    ...
    public Vehicle Vehicle { get; set; }
}

车辆(系统 B)

public class Vehicle
{
    [Key]
    public int VehicleSerialNo { get; set; }
    // alternate key
    public string VehicleID { get; set; }
    ...
    public Unit Unit { get; set; }
}

我想在 Unit.UnitNumber = Vehicle.VehicleID 之间创建一对一关系。

我试图定义这种关系,但没有成功:

modelBuilder.Entity<Vehicle>()
    .HasAlternateKey("VehicleID");

modelBuilder.Entity<Unit>()
    .HasAlternateKey("UnitNumber");

modelBuilder.Entity<Vehicle>()
    .HasOne<Unit>()
    .WithOne()
    .HasForeignKey("VehicleID");

modelBuilder.Entity<Unit>()
    .HasOne<Vehicle>()
    .WithOne()
    .HasForeignKey("UnitNumber");

我错过了什么?

这比预期的要难:

modelBuilder.Entity<Vehicle>()
    .HasOne(v => v.Unit)
    .WithOne(u => u.Vehicle)
    .HasForeignKey<Unit>(u => u.UnitNumber)
    .HasPrincipalKey<Vehicle>(v => v.VehicleID);