1

我在单个 SaveChanges() 中插入(添加新的)子实体和父实体,EF 决定先插入子实体(引用父实体,可以在探查器中看到插入语句),这显然会抛出

INSERT 语句与 FOREIGN KEY 约束冲突...:

[DriverStat].DriverId -> [Driver].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 所引用的 Driver 'dr' 尚不存在。

知道为什么 EF 要在父实体 (Driver) 之前插入子实体 (DriverStat) 吗?有没有办法告诉 EF 做正确的事?

有任何想法吗?斯蒂沃

编辑:问题解决了。运行最新的 ddl 后,我不小心丢失了这两个表之间的外键,导致 EF 不关心订单。抱歉误报

4

2 回答 2

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();

假设你有类似的东西

public virtual DriverStat DriverStat { get; set; }在驱动程序类和

public virtual Driver Driver { get; set; }在 DriverStat 类中

于 2013-05-23T22:56:31.220 回答
1

问题解决了。运行最新的 ddl 后,我不小心丢失了这两个表之间的外键,导致 EF 不关心订单。抱歉误报

于 2013-05-24T00:01:20.300 回答