首页 文章

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

提问于
浏览
53

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

目前我正在使用带有FluentNHibernate的 NHibernate.Tool.hbm2ddl.SchemaExport obj来为mysql数据库生成数据库模式 . 虽然我可以__000740_是一个很大的问题,每当我在数据库上调用 SchemaExport.Execute 时,它将删除所有表,然后重新创建它们 .

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

1 回答

  • 65

    SchemaUpdate 对象通过在调用 void Execute(bool script, bool doUpdate) 函数时显然生成并执行一系列 SQL UPDATE 语句(以及约束语句)来提供数据库模式更新 . 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);
    }
    

相关问题