在 EF 种子导入期间处理无效的外键

Dealing with invalid foreign keys during EF seeding import

在将数据从旧模式复制到新模式时,我发现了旧数据中缺少外键的情况。例如 Vehicle table 包含一个字段 VehicleTypeId,它是 table VehicleType 中主键 Id 的 link .我正在导入的一些车辆记录有 VehicleTypeId VehicleType table.

中不存在的 VehicleTypeId

在新架构中,外键约束已到位,因此 VehicleTypeId 必须出现在 VehicleType table 中,以便记录满足约束。我不想丢失记录,但我不确定 VehicleTypeId 应该给它什么。

我想过分配 VehicleTypeId = -1,但由于 VehcileType table 有一个不包含 -1 的基于身份的主键。我正在使用 Entity Framework 并通过代码播种该数据。在播种 VehicleType table 之后有没有办法添加引用 "unknown vehicle type" 的最后一行?

我想其他人一定 运行 遇到过这种情况。你做了什么?

是的,这正是我们所做的,假设您不能使 VehicleTypeId 可以为空。 SSIS 是处理此类事情的绝佳工具,但您可以将其加入 EF。因此,您需要为 VehicleType table 设置种子,存储对空 ID 的引用,然后导入车辆:

if (!db.VehicleTypes.Any(v => v.Description == "Unknown")
{
    var emptyVehicleType = new VehicleType { Description = "Unknown" };
    db.VehicleTypes.Add(emptyVehicleType);
    db.SaveChanges();  // emptyVehicleType.VehicleTypeId will now be filled in
}

然后在车辆中插入:

    var newVehicle = new Vehicle { VehicleTypeId = oldVehTypeId == 0 ? emptyVehicleType.VehicleTypeId: oldVehicleTypeId,
                                   otherNewField = otherOldField,
                                   etc.
                                 }