2011-05-06 85 views
7

在編寫在Fluent Nhibernate/Nhibernate上運行的應用程序時,有一點讓我擔心。我認爲任何ORM都是如此(甚至不使用ORM),但是......我猜這個詞是'研究領域',涉及部署後更新數據庫的最佳實踐和方法。部署後處理nHibernate/Fluent nHibernate中的架構更新

在nHibernate中,我建立了一個SessionFactory,並有一個初始運行,它根據映射寫出數據庫。這很好,我甚至可以手動編寫數據庫。但是當我的客戶回來並想要添加新內容時呢?我可以附加到數據庫而不會丟失數據嗎?我對這一切都是全新的,自從這個項目開始以來一直困擾着我,而且我真的不知道要確定我可以在部署後管理該程序的方向。

我看過其他堆棧溢出問題,我可以找到關於這個主題 - 其中一個甚至沒有接受的答案(雖然問題本身是一種模糊),但我確實發現了工具http://www.red-gate.com/products/sql-development/sql-compare/從問題 Tool to upgrade SQL Express database after deployment雖然我想知道是多麼好的'戰略'是。

回答

3

有幾個選項,使用the AutoMapping feature in Fluent NHibernate減少您編寫的映射代碼。如果您的模式更改符合AutoMap約定,那麼您只需處理相應的域對象更改。

另一個不太理想的選擇是採取數據庫優先的方法,並有like MyGeneration從模式自動生成域類和NHibernate映射文件。這工作,如果你有數據庫架構的完全控制,它可以爲實施良好的域模型設計(這很少發生過兩個條件......)

在這兩種方法中,these tools can help處理需要對數據庫腳本將模式更改「遷移」到新版本

+0

好吧,我知道自動映射。我更關心的是如果模式發生變化,恐怕它可能會自動更改我的數據庫並轉儲我的數據。 – Ciel 2011-05-10 13:48:47

+0

除非您在應用程序中編寫代碼來應用由NHibernate生成的模式腳本,否則這些腳本將不會自動應用。這些.NET [數據庫遷移工具](http://stackoverflow.com/questions/313/net-migrations-engine)可以幫助更新具有模式更改的數據庫,而不會丟失任何現有數據。 – 2011-05-10 13:56:11

0

根據我的經驗,部署後必須手動保持數據庫結構是最新的。
這意味着無論何時添加/更改您的數據庫結構,您都可以使用帶有DDL命令的腳本。當您準備部署時,您只需針對您的生產數據庫運行這些DDL腳本。
例如,如果添加一個「酒吧」列到你的「富」表,你的腳本會是這樣的(僞代碼):

ALTER TABLE foo ADD COLUMN 'bar' int(32) not null default(0); 
+2

這個問題顯然意味着自動解決方案 – Alexander 2012-11-14 13:32:30