我在单个SaveChanges()中插入(添加新的)子实体和父实体,并且EF决定先插入子节点(引用父节点,可以在profiler中看到insert语句),这显然会抛出
INSERT语句与FOREIGN KEY约束冲突......:
[DriverStat] .DriverId - > [驱动] .ID
driverId = Guid.NewGuid();
//parent
var dr = new Driver()
{
Id = driverId,
Name = "John",
};
db.Drivers.AddObject(dr);
//child
var driverMainStats = new DriverStat()
{
Driver = dr //parent reference. Same problem if FK DriverId = driverId is used
};
db.DriverStats.AddObject(driverMainStats);
db.SaveChanges();
由于司机' DriverStat引用的内容尚不存在。
知道为什么EF会想要在父(Driver)之前插入子实体(DriverStat)?有没有办法告诉EF做正确的事情?
有什么想法吗? 斯特沃
编辑: 问题解决了。在运行最新的ddl之后,我意外地错过了这两个表之间的外键,导致EF不关心订单。对不起,误报
答案 0 :(得分:2)
如果同时创建两个对象,或者您只想初始化子对象,请尝试以下操作:
driverId = Guid.NewGuid();
//parent
var dr = new Driver()
{
Id = driverId,
Name = "John",
//child
DriverStat = new DriverStat()
{
//Add stuff here, no need to do this (Driver = dr)
}
};
db.Drivers.AddObject(dr);
db.SaveChanges();
假设您有类似
的内容 在Driver类和中 public virtual DriverStat DriverStat { get; set; }
在DriverStat类中
public virtual Driver Driver { get; set; }
答案 1 :(得分:1)
问题解决了。在运行最新的ddl之后,我意外地错过了这两个表之间的外键,导致EF不关心订单。对不起,误报