我正在使用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
的更多信息。
答案 0 :(得分:15)
SchemaExport(cfg).Create(true, true))
正在做什么。我没有使用Fluent,但基于我刚看过的一个项目,我认为应该是SchemaUpdate(cfg).Execute(true,true)
编辑:由于这个答案似乎仍然在帮助人们,所以这里有一个更长篇大论的解释。
这里的主要区别是我们正在创建的对象。 SchemaExport
实例生成DDL以创建数据库。 Create
方法生成脚本,第二个参数告诉它是否针对数据库运行该脚本。 Create
调用Execute
,传递其他参数,包括“不要只丢弃表格,删除它并重新创建”的参数。这个类中没有选项可以不先删除表。
SchemaUpdate
实例是一个更复杂的野兽(内部),因为它查看现有表并在当前表和配置中指定的表之间生成增量(我找不到参考这个,我没看代码,我只知道它的工作原理)。但在这两种情况下,参数基本相同。第一个是“输出ddl到控制台”,第二个是“实际运行数据库的东西”。