我有一個非常簡單的單向映射。見下圖:插入後NHibernate仍然會更新
public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}
public PhoneNumberMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Number);
Table("ContactNumbers");
}
根據這一post NHibernate的3及以上後,設定鍵爲非null應該修復插件更新的問題(這個問題時,NHibernate的問題與外鍵設置爲空,那麼插入更新以更新外鍵以更正值),但這不適用於我。當我設定鍵不可爲空,NHibernate的問題有正確插入語句
INSERT INTO ContactNumbers
(Number,
ContactId)
VALUES ('(212) 121-212' /* @p0 */,
10 /* @p1 */);
正如你所看到的,它插入的ContactID場,但在那之後,它仍然發出更新語句
UPDATE ContactNumbers
SET ContactId = 10 /* @p0 */
WHERE Id = 34 /* @p1 */
所以要澄清問題。 NHibernate插入Contact行並正確指定了外鍵,然後它發出更新語句來更新冗餘的外鍵(ContactId)。
我怎樣才能擺脫這種多餘的更新語句? 謝謝。
順便說一句,我使用的是最新版本的NHibernate和流利的NHibernate的。該數據庫是SQLite的
當所有的希望都消失了,你來了:D。簡單,清晰,完美的作品,它甚至用單一的刪除替換了更新/刪除操作,該死的,你不知道我是多麼的感激,這是很多人都不知道的重要問題,謝謝hazzik – Davita 2012-07-20 09:03:07
是的,我們應該更新我們的文檔,但它是一個巨大而無聊的工作:( – hazzik 2012-07-20 09:16:55
我明白,感謝上帝,我們有:-) – Davita 2012-07-20 09:24:33