我正在尋找一種模式,可以在將記錄插入數據庫時用於父 - 子關係。由於子記錄需要父記錄先存在,我不得不使用討厭的東西,如存儲會話ID,然後在保存父記錄後更新外鍵。數據訪問設計模式
是否有任何知名的模式來解決這個問題。 Registers Gareth
我正在尋找一種模式,可以在將記錄插入數據庫時用於父 - 子關係。由於子記錄需要父記錄先存在,我不得不使用討厭的東西,如存儲會話ID,然後在保存父記錄後更新外鍵。數據訪問設計模式
是否有任何知名的模式來解決這個問題。 Registers Gareth
你似乎要麼記錄孩子在他們的父母之前,或在同一時間,這是可能的,但有點奇怪。你的數據模型建議孩子知道他們的父母,因此,這些數據表明父母要插在孩子面前。您可能無法在單個查詢中實現此功能,因爲您所說的外鍵指的是同一個表(A.parent -> A.id
)。
這聽起來像你沒有使用像NHibernate或Hibernate這樣的框架,並且你正在自己推出這很好,但如果你有這個選項,你可能想看看現有的OR映射框架。如果你滾你自己的,你需要做的鏈接插入,那麼你會在你的倉庫做這些使用事務,所以作爲一個例子:
public class ParentRepository
{
public void Save(Parent parent)
{
using (TransactionScope scope = new TransactionScope())
{
//Add you database code here to insert to both tables in a transaction
}
}
}
NHibernate的+1,但我不認爲如何TransactionScope將有所幫助,所以-1爲該 – zvolkov 2009-11-03 18:03:57
TransactionScope幫助,因爲如果你有一個對象的層次結構,你有一個父對象包含一個子對象,你插入一個新的記錄你希望確保數據的完整性。在事務中執行此操作將確保當您插入父項並且子項失敗時,事務將回滾並保持數據庫的完整性。 – 2009-11-03 18:38:09
你調用存儲過程或插入/直接更新? 'session id'是什麼意思?父母和孩子同時被保存了嗎?你指的是哪個外鍵? – 2009-11-03 17:27:11