为了简单起见。我在运行时使用Fluent NHibernate的Automapping和NHibernate的SchemaUpdate。在每次运行时,Automapper为所有实体类创建映射,SchemaUpdate将模式应用于现有数据库。我惊喜地发现它对空数据库也能正常工作。到目前为止,它在开发环境中运行良好,并且让我能够快速响应错误。
我的问题是它是否足够可靠留在生产代码中。显然,每次程序在生产环境中启动时都不需要运行,但它对增量产品更新很有用(尽管我不打算在产品发布后对域进行任何重大更改)。
(或许我真正的问题应该是结合使用这两种工具有多安全?)
更新
该应用程序有两个版本:独立桌面和多用户客户端/服务器。此外,由于业务领域(税务软件)的性质,我每年都可以从一个干净的数据库开始。
答案 0 :(得分:13)
为了能够在生产代码中运行,生产应用程序用于连接到数据库的帐户必须具有更改数据库架构的权限。
无论NHibernate代码的质量/可靠性如何,仅此一项就可以阻止您采用这种方法。
答案 1 :(得分:9)
我不会冒险。运行良好的是在已从生产中恢复的登台服务器上运行它,然后使用数据库比较工具(如Red Gate)检查更改并生成脚本。
答案 2 :(得分:8)
您可能需要考虑SchemaUpdate将始终进行加性和非破坏性更改,从而导致过时列和可空列,它们应该是不可为空的。
换句话说,绝对不能用于生产。
答案 3 :(得分:2)
这取决于数据的重要程度!我怀疑这对银行系统来说是个好主意。除了一件事,我对更新没有任何问题。有时它不会正确重命名。此外,与可以修改架构的帐户相关联的安全风险如下:)