如何使用NHibernate模式生成更新数据库表模式?

时间:2008-12-14 04:28:27

标签: .net nhibernate orm fluent-nhibernate schema

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

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

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

1 个答案:

答案 0 :(得分:65)

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

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

“NHibernate常见问题解答”(链接现已过期)有关如何使用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);
}