使用 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);
我正在尝试在两个数据库中加入两个 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);