Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NHibernate一次执行多个数据库更改?_C#_Database_Nhibernate - Fatal编程技术网

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

C# 如何使用NHibernate一次执行多个数据库更改?,c#,database,nhibernate,C#,Database,Nhibernate,我正在研究在桌面应用程序中使用Fluent NHibernate,该应用程序使用3个不同的数据库文件。(嗯,有三种不同的类型。) DB1是包含表A、B、C和D的主数据库文件 DB2是一个数据库文件,包含表E中的详细数据(每秒X个样本,程序会话将收到一个新文件,因为它们可能会变得非常大) DB3是一个数据库文件,用于在用户之间导出和导入数据(包含a中的1行、B中的1行以及属于a和B中给定行的所有E) 创建它并不是一个真正的问题,因为SchemaExport.Create函数可以很好地实现这一点

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

  • DB1是包含表A、B、C和D的主数据库文件
  • DB2是一个数据库文件,包含表E中的详细数据(每秒X个样本,程序会话将收到一个新文件,因为它们可能会变得非常大)
  • DB3是一个数据库文件,用于在用户之间导出和导入数据(包含a中的1行、B中的1行以及属于a和B中给定行的所有E)
创建它并不是一个真正的问题,因为SchemaExport.Create函数可以很好地实现这一点

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

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

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;
  }
}
我是完全错误地看待这一点,还是我的案例过于复杂,使用手动方法会更好?
使用Fluent NHibernate更新并从版本1迁移到版本3的最佳解决方案是什么?或者有人会推荐使用手动方法吗?如果是,为什么?

我无法回答如何使用Fluent NHibernate来实现这一点,因为我从来没有想出一个好方法。在我看来,它不是为处理真正的数据库迁移而设置的。因此,对于我所有的Fluent NHibernate项目,我使用它并不完美,但它确实起到了作用。

你是对的,通常使用“迁移”方法来构建数据库,你需要在这一过程中的每一步都保持不变。MigratorDotNET相当不错,但看起来创建者已经停止了贡献:。该线程中列出了几个备选方案。完全同意。我为这个问题列出了.NET空间中最常见的迁移工具列表。。。创造者在过去的几个月里贡献了一些。不过,总的来说,它已经相当不错了,而且很简单。无需安装Ruby来构建/迁移或诸如此类的东西。
namespace Version1 {
  public class A {}
  DoUpdate();
}

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