54

我试图弄清楚如何使用 NHibernate 配置和映射来更新表模式,而不是删除和重新创建它们。

目前我正在使用NHibernate.Tool.hbm2ddl.SchemaExport带有 FluentNHibernate 的 obj 来为 mysql 数据库生成数据库模式。虽然我不能说这是一个大问题,但每当我调用SchemaExport.Execute数据库时,它都会删除所有表,然后重新创建它们。

更酷的是,如果我可以让它更新现有的表结构,尽可能地保留数据。但我真的不想使用商业产品或代码生成器,因为我一般不喜欢代码生成,而且我不需要这个,我会考虑为此付费。因此,希望任何答案都能牢记这些警告。

4

1 回答 1

67

SchemaUpdate对象通过在 调用它的函数时显然生成和执行一系列SQL UPDATE语句(以及约束语句)来提供数据库模式更新。void Execute(bool script, bool doUpdate)SchemaUpdate 类位于NHibernate.Tool.hbm2ddl命名空间中,可以在 Nhibernate.dll 文件中找到。

SchemaUpdate 在 nhibernate 1.0.2 工具集指南的第 15 章中提到,here(第 15.1.5 节)。

“NHibernate FAQ”有(链接现已过期)如何使用 SchemaUpdate 的更完整示例:

[Test]
public void Update_an_existing_database_schema()
{
    _cfg = new Configuration();
    _cfg.Configure();
    _cfg.AddAssembly(Assembly.LoadFrom("DataLayer.dll"));
    var update = new SchemaUpdate(_cfg);
    update.Execute(true, false);
}
于 2009-03-02T15:49:51.033 回答