在将数据从旧架构复制到新架构时,我发现旧数据中缺少外键的情况。例如,Vehicle
表包含字段VehicleTypeId
,该字段是指向表Id
中主键VehicleType
的链接。我导入的部分车辆记录的VehicleTypeId
在VehicleType
表格中不存在。
在新模式中,外键约束已到位,因此VehicleTypeId
表中必须存在VehicleType
才能使记录满足约束。我不想丢失记录,但我不确定VehicleTypeId
给出了什么。
我考虑过分配VehicleTypeId = -1
但是VehcileType
表有一个不包含-1
的基于身份的主键。我正在使用实体框架并通过代码播种该数据。播种VehicleType
表以添加引用“未知车辆类型”的最后一行后是否有办法?
我认为其他人必须遇到这种情况。你做了什么?
答案 0 :(得分:1)
是的,这正是我们所做的,假设您无法使VehicleTypeId成为可空。 SSIS对于这种事情来说是一个很好的工具,但是你可以将它锤入EF。因此,您需要为VehicleType表设定种子,存储对空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.
}