在部署后处理nHibernate / Fluent nHibernate中的架构更新

在编写一个在Fluent Nhibernate / Nhibernate上运行的应用程序时,我有点担心。 我认为任何ORM都是如此(甚至不使用ORM),但是......我猜这个词是'研究领域',涉及部署后更新数据库的最佳实践和方法。

在nHibernate中,我建立了一个SessionFactory,并有一个初始运行,它根据映射写出数据库。 这很好,我甚至可以手动编写数据库。 但是当我的客户回来并想要添加新内容时呢? 我可以附加到数据库而不会丢失数据吗? 我对这一切都是全新的,自从这个项目开始以来一直困扰着我,而且我真的不知道要确定我可以在部署后管理该程序的方向。

我已经看了一些关于这个主题的其他堆栈溢出问题 - 其中一个甚至没有被接受的答案(尽管问题本身有点含糊),但是我确实发现了工具-gate.com/products/sql-development/sql-compare/从问题工具部署后升级SQL Express数据库,虽然我想知道是多么好的'战略'是。


有几个选项,使用Fluent NHibernate中的AutoMapping功能来最小化您编写的映射代码。 如果您的模式更改符合AutoMap约定,那么您只需处理相应的域对象更改。

另一个不太理想的选择是采用数据库优先的方法,并且像MyGeneration那样自动生成模式中的域类和NHibernate映射文件。 如果你完全控制了数据库模式并且可以实现一个好的域模型设计(这两种情况很少发生......)

无论采取哪种方法,这些工具都可以帮助处理将模式更改“迁移”到新版本所需的数据库脚本


根据我的经验,在部署之后,您必须手动保持您的数据库结构是最新的。
这意味着无论何时添加/更改数据库结构,都可以使用具有DDL命令的脚本来完成。
当您准备部署时,您只需针对您的生产数据库运行这些DDL脚本。
例如,如果你在'foo'表中添加一个'bar'列,你的脚本就会像(伪代码)一样:

ALTER TABLE foo ADD COLUMN 'bar' int(32) not null default(0);
链接地址: http://www.djcxy.com/p/6707.html

上一篇: Dealing with Schema Updates in nHibernate/Fluent nHibernate after Deployment

下一篇: Invariant inheritance problem