2010-01-14 21 views
13

爲了簡單起見。我在運行時使用了Fluent NHibernate的Automapping和NHibernate的SchemaUpdate。在每次運行時,Automapper爲所有實體類創建映射,並且SchemaUpdate將架構應用於現有數據庫。我驚喜地發現它對一個空數據庫也能正常工作。到目前爲止,它在開發環境中運行良好,並且讓我能夠相當快地響應錯誤。NHibernate SchemaUpdate在生產代碼中是否安全?

我的問題是它是否足夠可靠地離開生產代碼。顯然,每次程序在生產環境中啓動時都不需要運行,但它對增量產品更新非常有用(儘管我不計劃在產品發貨後對域進行任何重大更改)。

(也許是我真正的問題應該是它如何安全是結合使用這兩種工具?​​)

更新

應用程序有兩個版本:一個獨立的桌面和多用戶客戶機/服務器。同樣由於業務領域(稅務軟件)的性質,我每年都有一個清潔的數據庫開始。

+0

CatZ和Greg Beech對於提出安全問題表示敬意。我沒有考慮到這一點。我大部分時間都花在獨立桌面版上,安全性並不是那麼重要。 – 2010-01-14 17:09:57

回答

12

爲了能夠在生產代碼中運行,生產應用程序用來連接到數據庫的帳戶必須具有更改數據庫架構的權限。

無論NHibernate代碼的質量/可靠性如何,只有這樣才能阻止你使用這種方法。

2

這取決於數據的重要性!我懷疑這對銀行體系來說是個好主意。除了一件事之外,我對這次更新沒有任何問題。有時它不能正確重命名。更進一步,它是一個安全風險連接到一個帳戶,可以修改架構,就像:)

7

你可能想要考慮的是,SchemaUpdate總是會進行疊加和非破壞性更改,導致陳舊的列和可空的列,他們應該在哪裏不可空。

換句話說,絕對不適合生產使用。

+1

那麼有什麼好的選擇?某種類型的遷移?任何良好的.NET框架,你會爲此建議?謝謝 – andryuha 2011-01-27 21:38:24

8

我不會冒險的。運行良好的是在已從生產恢復的臨時服務器上運行它,然後使用數據庫比較工具(如Red Gate)檢查更改並生成腳本。