使用ORM(特别是NHibernate)时,如何处理数据的重构?我的意思是,如果数据对象发生更改以使底层关系数据库架构发生更改,ORM是否在数据库中提供架构升级/降级方面的任何帮助?如何将现有数据迁移到新架构?
我正在决定使用ORM并且曝光率非常有限.如果问题很幼稚,请耐心等待.
Jam*_*acs 16
在NHibernate中,您可以使用SchemaUpdate类对架构进行附加更改.(添加剂更改将包括新表,新列等,但不包括删除.)SchemaUpdate旨在用于开发目的,不应在生产中运行.我强烈建议您查看一个SQL迁移工具,如Tarantino,dbdeploy.net,RikMigrations或类似工具.
迁移工具有两种形式 - 基于SQL脚本(Tarantino和dbdeploy.net)和基于代码(RikMigrations和Rails样式的迁移).使用基于代码的迁移工具,您可以使用C#,VB,Ruby编写的代码编写迁移...基于SQL脚本的SQL工具采用一组有序的SQL脚本.在任何一种情况下,迁移工具都会针对您之前未运行的数据库运行任何迁移.(通常,迁移表列出已运行的脚本,并允许工具确定哪些仍需要运行.)SQL脚本通过以下方式生成:
// SchemaUpdate.Execute(bool script, bool doUpdate)
new SchemaUpdate(cfg).Execute(true, false);
Run Code Online (Sandbox Code Playgroud)
然后编辑品尝.或者你可以使用NHibernate的SchemaExport生成一个新的模式,并使用模式差异工具,例如Microsoft Visual Studio for Database Professionals Ultimate Now With Extra Mayo Edition(aka DataDude)或RedGate SQL Compare.您需要手动编写转换脚本,因为SQL迁移工具通常无法知道填充了T/F的Foo char(1)列应该转换为该Bar位列.
我个人更喜欢基于SQL脚本的迁移工具,因为我可以使用工具生成模式差异,然后进行编辑,而不必使用C#或类似语言手动滚动整个迁移.
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |