0
我有一個實體TrackLog
,其組件集合爲TrackPoints
。我創建一個新的TrackLog
並添加一些Trackpoints
並將其保存到數據庫。保存一個組件集合的實體應該做一個SQL DELETE,然後使用NHibernate INSERT?
當我搶我TrackLog
再次添加新TrackPoint
,而不是做一個SQL INSERT像我期望的那樣,它做在與TrackLog
相關聯的所有TrackPoints
一個刪除,然後重新添加每TrackPoint
那就是收藏。
這是NHProf輸出:
UPDATE TrackLog SET Version = 2 etc...
DELETE FROM TrackPoints WHERE TrackLog_Id = '80cc1e0d' etc...
INSERT INTO TrackPoints etc..
INSERT INTO TrackPoints etc...
INSERT INTO TrackPoints etc...
我的問題是,是一個組件集合這種正常行爲?這也發生在我的枚舉集合中。如果這不是正常行爲,我該如何修改映射以使其顯示正確的行爲(我添加的TrackPoint
只有一個INSERT)?
謝謝,我我自己也得出了同樣的結論。還有一點需要注意,你的組件必須重寫'Equals()'和'GetHashCode()',否則性能會更差(而不是一個DELETE語句,它會爲每個項目生成一個DELETE,然後執行INSERT每一個)。 – 2010-05-05 19:28:52
是的,這是正確的,它是有道理的,因爲組件沒有標識符,所以這是唯一的方法(NH)告訴它們分開。 – 2010-05-05 19:46:24