2011-01-21 90 views
1

您可以請與NHibernate架構生成分享您的經驗嗎?在數據模型的複雜性和大小方面它有多大的可擴展性?與手工製作的數據模型相比,它是否有任何重大的性能影響?NHibernate架構生成

+1

您是否正在專門討論從類定義生成數據庫模式?與手動構建數據庫模式以匹配類定義?如果是這樣的話,這可能是一個80%的解決方案,非常接近您第一次發佈所需的內容。在第一次產品發佈後,您必須考慮模式生成實際上不會執行的遷移。 – 2011-01-21 11:27:06

+0

是的Michale,我指的是從類定義生成數據庫模式。很高興知道它非常接近版本1的需求,我認爲這將節省大量時間。謝謝。 – patelsan 2011-01-21 15:06:40

回答

2

我發現它對於開發非常有用,當你可以使用它的一些代碼來隨時重建和重新填充測試數據庫。邁克爾關於遷移的觀點與我們的經驗相符 - 一旦你完成了最初的發佈,你需要決定改變生產數據庫的另一種方法。我們已經使用了NH模式生成和約30種常見類型的模型(包括每個子類排列的表),並且它生成的定義是正確的,所以對模式的大小沒有明顯的限制它可以處理。

我現在傾向於認爲自動生成的模式幾乎總是比手工生成的模式更好的起點,因爲軟件會爲您提供完全一致的東西,並且完全符合您的具體要求。熟練的DBA可以進行的優化類型在您需要調整大量特定的工作負載之前不可能是必需的或有用的。

0

您正在比較蘋果和梨。手工製作的模型將始終(完好)執行任何ORM技術。

我個人認爲NHibernate性能很好,幾乎可以將任何OO模型映射到關係模型,這就是它的優點。有幾個疑難雜症就像知道應用程序啓動時間,並確保您正確使用會話管理。

我會推薦NHibernate,並且已經使用它18個月,現在在大約80桌左右的模式上,還沒有看到任何重大問題。

0

我會說沒有任何性能影響。實際上,沒有很多選擇如何創建表以適應映射文件。還有一些額外的功能僅用於模式創建,例如指定數據庫數據類型,創建約束和索引以及創建模式時運行任意sql的可能性。

性能調整通常可以在自動創建模式後完成。例如,您讓NH創建表並運行一些Alter Table語句來設置一些與性能相關的設置。之後創建(或替換)索引也很容易。所有這些甚至可以寫入映射文件。 NH的工作仍然由NH完成:根據已經存在的信息創建所有表和列:映射文件。

1

如果您需要導出模式並填充數據庫,您希望看到Fluent NHibernate模式工具。它能夠讀取你的程序集,hibernate.cfg.xml,* .hbm.xml和Fluent Mappings。您可以生成/執行數據庫的DDL(創建/更新/刪除表),並接受類似CSV的輸入文件用於填充創建/更新的數據庫(數據集文件接受在HQL中完成的小型查詢) 。這個工具對於使用NHibernate的單元測試和Web應用程序非常有用。

查看更多:https://bitbucket.org/guibv/fnst/wiki/Home