我有一個實體框架模型,有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