架构更新后删除了流畅的NHibernate数据

时间:2012-04-19 19:37:48

标签: database nhibernate fluent-nhibernate fluent

我正在使用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();

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

在来自流利NH的维基上,我无法找到有关ExposeConfiguration的更多信息。

1 个答案:

答案 0 :(得分:15)

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

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

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

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