在编写一个在Fluent Nhibernate / Nhibernate上运行的应用程序时,我有点担心。我想这对任何ORM都是如此(甚至没有使用ORM),但是......我猜这个词是'研究领域',它与部署后更新数据库的最佳实践和方法有关?
在nHibernate中,我建立一个SessionFactory并进行初始运行,根据映射将数据库写出来。这很好,我甚至可以手动编写数据库。但是当我的客户回来并想要添加新内容时呢?我可以在不丢失数据的情况下附加到数据库吗?我对这一切都是全新的,自从这个项目开始以来一直困扰着我,我真的不知道要采取什么方向来确保我可以在部署之后管理该程序。
我已经查看了有关此主题的其他堆栈溢出问题 - 其中一个甚至没有接受的答案(尽管问题本身有点模糊),但我确实发现了工具{{3}从问题 http://www.red-gate.com/products/sql-development/sql-compare/虽然我想知道“战略”有多好。
答案 0 :(得分:3)
有几个选项,使用the AutoMapping feature in Fluent NHibernate来最小化您编写的映射代码。如果您的架构更改符合AutoMap约定,那么您只需要使用相应的域对象更改。
另一个不太理想的选择是采用数据库第一种方法,并从like MyGeneration自动生成域类和NHibernate映射文件。如果您可以完全控制数据库模式,并且可以实现良好的域模型设计(这两种情况很少发生......),这就有效。
在任何一种方法中,these tools can help都会处理将架构更改“迁移”到新版本所需的数据库脚本
答案 1 :(得分:0)
根据我的经验,在部署之后,您必须手动保持数据库结构是最新的 这意味着无论何时添加/更改数据库结构,都可以使用带有DDL命令的脚本执行此操作 当您准备好部署时,只需针对生产数据库运行这些DDL脚本 例如,如果你在'foo'表中添加一个'bar'列,那么你的脚本就像(伪代码):
ALTER TABLE foo ADD COLUMN 'bar' int(32) not null default(0);