Enity框架未将新创建的对象ID分配给子对象

时间:2019-03-01 16:23:34

标签: c# entity-framework

应该工作的非常简单的方法对我不起作用,我遇到这样的情况

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的原因,这样我肯定知道它会起作用,因为那样的话,记录将是是为数据库中的设备创建的,我不希望部分插入,而是一次全部插入。

2 个答案:

答案 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;