c# - 如何使用 NHibernate 一次执行多个数据库更改?

标签 c# database nhibernate

我正在研究在使用 3 个不同数据库文件的桌面应用程序中使用 Fluent NHibernate。 (嗯,3 种不同的类型。)

  • DB1 是包含表 A、B、C 和 D 的主数据库文件。
  • DB2 是一个数据库文件,包含表 E 中的详细数据(每秒 X 个样本,程序 session 将接收一个新文件,因为它们可以变得非常大)。
  • DB3 是一个数据库文件,用于在用户之间导出和导入数据(包含来自 A 的 1 行,来自 B 的 1 行以及属于 A 和 B 给定行的所有 E)

创建它并不是真正的问题,因为 SchemaExport.Create 函数可以完美地做到这一点。

我面临的问题是我不完全知道更改表格的最佳方法是什么。更准确地说,一次进行多个版本更新。我的应用程序目前是版本 1,附带数据库格式版本 1,下周我将所有内容升级到版本 2 - 我可以使用 SchemaUpdate.Execute 更新数据库 - 下个月我将所有内容升级到版本 3 我可以再次做同样的事情.但我希望我的用户能够立即从版本 1 更新到版本 3。

如果我手动操作,我会在每个包含版本的数据库文件中创建一个名为版本的表。然后我会根据当前版本检查该字段并执行 ALTER 表查询。例如:

if (db_version < LATEST_VERSION) {
  switch (db_version + 1) {
    case 2: Execute("ALTER TABLE A..."); Execute("UPDATE A..."); break;
    case 3: Execute("ALTER TABLE B..."); break;
  }
}

使用这种方法(当直接使用 SQLite 数据库提供程序时)我只需要预见我的数据模型的 1 个版本、处理所有内容的 1 个更新服务,但我需要手动创建我的数据库和我的数据模型文件,以及我将不得不更新至少两个 .db 文件和 2 个更新服务(每个数据库类型一个)。这可以看作是重复的工作。 (我发现 database migration of Banshee 是我的意思的一个例子。)

通过使用 NHibernate,我消除了维护数据库文件和数据模型的过程,但是从 1 到 3 进行更新时我能看到的唯一方法是保留每个数据模型的遗留版本并执行类似以下操作:

namespace Version1 {
  public class A {}
  DoUpdate();
}

namespace Version2 {
  public class A {}
  DoUpdate();
}

我是不是完全以错误的方式看待这个问题,还是我的情况太复杂了,我最好还是使用手动方法? 使用 Fluent NHibernate 从版本 1 更新和迁移到版本 3 的最佳解决方案是什么?或者有人会推荐使用手动方法吗?如果是,为什么?

最佳答案

我无法回答如何用 Fluent NHibernate 做到这一点,因为我从来没有想出好的方法。在我看来,它不是为处理真正的数据库迁移而设置的。因此,对于我所有的 Fluent NHibernate 项目,我都使用 http://code.google.com/p/migratordotnet/它并不完美,但可以胜任。

关于c# - 如何使用 NHibernate 一次执行多个数据库更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424203/

相关文章:

mysql - MATCH 多行与 SQL 查询中的多行并找到百分位数匹配?

使用 ASP.NET MVC 3 的 NHibernate session + 事务

c# - 使用带有 TimeSpan 的 AutoResetEvent.WaitOne 创建迭代低于 1 毫秒的循环

c# - Microsoft Roslyn GetDiagnostics() 无法检测到错误

c# - FileUpload 在本地运行良好,但在我将项目发布到服务器时效果不佳

php - 在 php 中调整 sql 中的图像大小并显示图像

java - 如何备份运行中的嵌入式H2数据库引擎?

c# - 由于版本列为空,无法保存实体。 NHibernate

hibernate - 如果我学习 NHibernate,我会知道 Hibernate 吗? Spring.net 和 (Java) Spring 怎么样?

c# - .NET 正则表达式 : negate previous character for the first character in string