當ISession.Get被調用來通過其鍵而不是使用動態SQL來獲取實體時,我想讓NHibernate調用存儲過程。NHibernate只有存儲過程
我們一直在使用NHibernate並允許它爲查詢和插入/更新/刪除生成我們的SQL,但現在可能必須將我們的應用程序部署到一個需要我們使用存儲過程來訪問所有數據庫的環境。我們可以在我們的.hbm.xml映射文件中使用sql-insert,sql-update和sql-delete進行插入/更新/刪除操作。我們的hql和標準查詢將不得不用存儲過程調用來替代。
但是,我還沒有想出如何強制NHibernate使用自定義存儲過程通過其密鑰獲取實體。我仍然希望能夠調用ISession.Get,如:
using (ISession session = MySessionFactory.OpenSession())
{
return session.Get<Customer>(customerId);
}
,並延遲加載的對象,但我想NHibernate的調用,而不是生成動態SQL我「GetCustomerById」存儲過程。
可以這樣做嗎?
也許NHibernate不再適合我們必須支持的新環境。
老實說,你真的需要改變環境,這些存儲過程要求絕對是一成不變的,它們不提供任何安全性和性能方面的好處,如果不是開發人員幾個月的時間,可以輕鬆地爲您的項目增加數週。這聽起來完全是一個管理缺陷。 – 2010-03-20 01:28:23
我不得不同意克里斯。我不知道這是否是一個管理決策,但是爲了使用SP而從多個角度來看並不是一個好的做法。 – 2010-03-20 01:34:21
我同意SP是一個糟糕的路要走。我介紹了NH,以避免寫出數百個存儲過程並提高我們的生產力,這非常棒。客戶站點的某些人認爲這是安全性要求,以防止我假設的SQL注入。它可能是管理層,數據庫管理員,基礎設施/ IT,但我無法與最終決策者溝通。很明顯,SQL注入在包含動態SQL的SP中可能仍是一個問題,因此策略可能會產生虛假的安全感。 – ChrisB2010 2010-03-20 01:54:29