我正在寻找关于其他人如何管理以下情况的一些想法 - 我有一些想法,但它们看起来有点乱,我不禁想到我错过了什么。
情况如下:
新列不能为空。例如,我最近不得不将DateCreated列添加到表中,应用程序现在使用该日期。由于现在唯一缺少数据,似乎没有必要添加代码来检查错误。
在我的应用程序中,我有一个更新程序可以执行SchemaUpdate来添加新的数据库列 - 但是,应用程序将开始崩溃,因为它期望新列中的值。
我需要在该列中获得一些合理的默认数据。在这种情况下,我手动运行更新以将日期设置为当前日期(足够好的情况)。在这种特殊情况下,我认为您不能使用流畅的映射将列默认设置为getdate()。
我的想法
其他人如何处理这种情况?
答案 0 :(得分:1)
为了解决数据库版本问题,有很多不同的框架。 我正在使用MigratorDotNet。它是开源的,提供非常简单的API。 MigratorDotNet执行您想要的相同操作,但将数据库版本存储在将在第一次运行时创建的特殊表中。
此外,它还是作为控制台应用程序创建的,这就是您可以非常轻松地在CI服务器上使用它的原因。
答案 1 :(得分:0)
使用DBDeploy(http://dbdeploy.com/)
这种方式的工作原理是:
如果您需要对alter scripts
的一些解释,请查看http://goforthandcode.blogspot.com/2007/12/brief-history-of-database.html披露:我为ThoughtWorks工作,我的一些同事创建了DBDeploy和DBDeploy.Net
答案 2 :(得分:0)
使用SchemaUpdate, nHibernate 的一项功能。
对于参考数据,我使用标准格式化数据(例如CSV)中的简单输入代码。更新应用程序时,将从这些文件导入新数据。逻辑仅在数据已更改或更新时才更新数据。为此,我有一个额外的列是ModificationDate。
我将新的参考数据保存在带有另一个扩展名的压缩文件中以避免混淆(.dat)。
它工作得很好,我在小型桌面应用程序和大型企业项目中使用它。数据库的版本存储在数据库中名为DatabaseSetting的表中。