我有一个实体框架模型,有3个表(每个都有缩进主键)。根表与子表具有一对多关系,该子表与子表具有一对多的关系。该模型在从数据库生成的模型中正确反映。实体框架4.1关系和插入?
在代码中,我们对父表执行Insert(Add),然后插入那些子表的表格,最后我们插入到子表的子表中。该代码看起来类似于下面的示例:
foreach(var parentItemDTO in someDTOCollection) {
foreach(var someChildDTOItem in someChildDTOCollection) {
// Do some mapping here to the childEntity from DTO
// The foreign key relationship isn't set during mapping.
childTable.Insert(childEntity); // Underlying code is _dbSet.Add(entity)
foreach(var someChildChildDTOItem in someDTOChildChildCollection) {
// Do some mapping here to childChildEntity from DTO
// The foreign key relationship isn't set during mapping.
childChildTable.Insert(childChildEntity); // Underlying code is _dbSet.Add(entity)
}
}
// Do mapping here of the parentEntity from DTO
parentTable.Insert(someEntity); // Underlying code is _dbSet.Add(entity)
}
插入数据库似乎工作。但是,我想要了解的是,在映射过程中,EF如何保持这些对象的关系,而无需明确定义外键关系?这些插入范围是否安全?这是否会导致孤儿或孩子被插入错误的父母(现在我们没有看到这种情况发生,但它是否有潜力)?
谢谢!
编辑(校正):
的代码已被更新,以反映父插件发生后所有的孩子插件。
哦,肖恩,实际插入不发生,直到你调用的SaveChanges()。当您将对象添加到DbSet时,EF只会开始在内存中跟踪它,只有当您保存所有实体时才会写入数据库。此时,EF会发现父实体需要首先被保存,而不是将其PK用作子实体中的FK。这是你想知道的吗? – LeffeBrune