是否有可能使用nHibernate爲插入/更新操作生成原始SQL語句而不實際執行它們?當然,假設一切(映射,連接字符串等)都已正確配置?如何爲插入/更新生成nHibernate原始sql而不執行?
我發現的最接近的事情就是打電話:
Session.SessionFactory.GetClassMetadata(typeof(Client))
返回包含SQLIdentityInsertString類型SingleTableEntityPersister的對象,看起來像這樣:
INSERT INTO Client (FirstName, LastName) values (?, ?)
但它仍然需要我手動綁定所有的屬性,並且最重要的是SQLIdentityInsertString是一個保護屬性。有沒有適當的方法來做到這一點?
你爲什麼要這樣做? – mjwills
我需要從XML文件導入大量的客戶端到數據庫中。有多個查詢需要執行,但是如果我有用於插入/更新操作的原始SQL,則只需一個查詢即可完成。我已經用硬編碼的SQL查詢對它進行了測試,但這當然不是很好維護(即使它確實提供了顯着的加速)。我想在運行時生成代碼,使用現有的nHibernate配置和映射,而不是手動完成。 –
我想有一個攔截器接口或基類中的一個方法,它會爲您提供將要使用的SQL字符串:OnPrepareStatement()。你可以利用這一點,但我認爲你必須先模擬工作,然後回滾事務。 –