我正在试图弄清楚如何使用NHibernate配置和映射来更新表模式,而不是删除并重新创建它们。
目前我正在使用NHibernate.Tool.hbm2ddl.SchemaExport
obj和FluentNHibernate为mysql数据库生成数据库模式。虽然我不能说这是一个很大的问题,每当我在数据库上调用SchemaExport.Execute
时,它就会删除所有表,然后重新创建它们。
如果我可以让更新现有的表结构尽可能保留数据,那会更酷。但我真的不想使用商业产品或代码生成器,因为我不喜欢一般的代码生成,而且我不需要这么多,我会考虑支付它。所以希望任何答案都会记住这些警告。
答案 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);
}