3

我正在使用 Fluent NHibernate 来处理我的数据库。

运行以下代码时,有些事情会起作用。一个函数更新了表结构,这也有效,但我的数据不见了。

ISessionFactory result = Fluently.Configure()
    .Database(MySQLConfiguration.Standard.ConnectionString(connectionString))
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Page>())
    .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
    .BuildSessionFactory();

有谁知道如何解决这个问题?必须更新表,但不得删除数据。

在 fluent NH 的 wiki 上,我找不到更多关于ExposeConfiguration.

4

1 回答 1

16

SchemaExport(cfg).Create(true, true))是做什么的。我没有使用 Fluent,但根据我刚刚看过的一个项目,我认为它应该类似于SchemaUpdate(cfg).Execute(true,true)

编辑:由于这个答案似乎仍然对人们有所帮助,所以这里有一个冗长的解释。

这里的主要区别是我们正在创建的对象。SchemaExport实例生成 DDL 来创建数据库。该Create方法生成脚本,第二个参数告诉它是否对数据库运行该脚本。 Create调用Execute,传递额外的参数,包括一个说“不要只是删除表,删除它并重新创建它”的参数。此类中没有不首先删除表的选项。

SchemaUpdate实例是一个更复杂的野兽(内部),因为它查看现有表并在当前表和配置中指定的表之间生成一个增量(我找不到这个参考,我没有看在代码中,我只知道它有效)。但是,在这两种情况下,参数基本相同。第一个是“输出 ddl 到控制台”,第二个是“实际运行数据库”。

于 2012-04-19T19:43:25.547 回答