应该工作的非常简单的方法对我不起作用,我遇到这样的情况
var equipment = new Equipment(); // This has Id column PK, INT and Identity
context.Equipment.Add(equipment);
var software = new EquipmentSoftware(); // This has primary key EquipmentId which is actually the Id of equipment table
software.EquipmentId = equipment.Id;
context.EquipmentSoftware.Add(software);
context.SaveChanges();
现在理想情况下这应该可行,它应该基于为设备生成的ID创建设备软件的记录。
但是它没有这样做,并且给了我设备软件表的主键冲突错误,因为它试图在设备软件表中输入EquipmentId-0,这意味着它不使用生成的设备的设备ID < / p>
有什么主意吗?
修改
所有代码都在交易中。因此,我希望一次性全部插入,这就是为什么我不想先使用context.SaveChanges()
保存设备然后再使用ID的原因,这样我肯定知道它会起作用,因为那样的话,记录将是是为数据库中的设备创建的,我不希望部分插入,而是一次全部插入。
答案 0 :(得分:0)
在访问equipment.Id之前,您需要先调用context.SaveChanges()。请查看以下答案: How can I get Id of inserted entity in Entity framework?
答案 1 :(得分:0)
您可以使用navigation property
进行操作。
因此,代替此语句:
software.EquipmentId = equipment.Id;
您需要使用这个:
software.Equipment = equipment;