2010-01-14 45 views
13

为了简单起见。我在运行时使用了Fluent NHibernate的Automapping和NHibernate的SchemaUpdate。在每次运行时,Automapper为所有实体类创建映射,并且SchemaUpdate将架构应用于现有数据库。我惊喜地发现它对一个空数据库也能正常工作。到目前为止,它在开发环境中运行良好,并且让我能够相当快地响应错误。NHibernate SchemaUpdate在生产代码中是否安全?

我的问题是它是否足够可靠地离开生产代码。显然,每次程序在生产环境中启动时都不需要运行,但它对增量产品更新非常有用(尽管我不计划在产品发货后对域进行任何重大更改)。

(也许是我真正的问题应该是它如何安全是结合使用这两种工具?​​)

更新

应用程序有两个版本:一个独立的桌面和多用户客户机/服务器。同样由于业务领域(税务软件)的性质,我每年都有一个清洁的数据库开始。

+0

CatZ和Greg Beech对于提出安全问题表示敬意。我没有考虑到这一点。我大部分时间都花在独立桌面版上,安全性并不是那么重要。 – 2010-01-14 17:09:57

回答

12

为了能够在生产代码中运行,生产应用程序用来连接到数据库的帐户必须具有更改数据库架构的权限。

无论NHibernate代码的质量/可靠性如何,只有这样才能阻止你使用这种方法。

2

这取决于数据的重要性!我怀疑这对银行体系来说是个好主意。除了一件事之外,我对这次更新没有任何问题。有时它不能正确重命名。更进一步,它是一个安全风险连接到一个帐户,可以修改架构,就像:)

7

你可能想要考虑的是,SchemaUpdate总是会进行叠加和非破坏性更改,导致陈旧的列和可空的列,他们应该在哪里不可空。

换句话说,绝对不适合生产使用。

+1

那么有什么好的选择?某种类型的迁移?任何良好的.NET框架,你会为此建议?谢谢 – andryuha 2011-01-27 21:38:24

8

我不会冒险的。运行良好的是在已从生产恢复的临时服务器上运行它,然后使用数据库比较工具(如Red Gate)检查更改并生成脚本。

相关问题