EF在父实体之前插入Child,抛出与FOREIGN KEY约束冲突

时间:2013-05-23 22:36:33

标签: entity-framework foreign-keys

我在单个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不关心订单。对不起,误报

2 个答案:

答案 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不关心订单。对不起,误报