我试图弄清楚如何使用NHibernate配置与映射来更新表模式,而不是删除和重新创建它们.
目前我正在使用NHibernate.Tool.hbm2ddl.SchemaExport
带有FluentNHibernate 的obj来为mysql数据库生成数据库模式.虽然我不能说这是一个很大的问题,但每当我调用SchemaExport.Execute
数据库时,它都会删除所有表,然后重新创建它们.
如果我可以让它更新现有的表结构,尽可能保留数据,那会更酷.但我真的不想使用商业产品或代码生成器,因为我不喜欢一般的代码生成,而且我不需要这么多,我会考虑支付它.所以希望任何答案都会记住这些警告.
所述SchemaUpdate工具对象提供数据库模式的更新,通过明显地生成和执行的一系列SQL UPDATE语句(以及约束语句)时,它的void Execute(bool script, bool doUpdate)
功能将被调用.SchemaUpdate类位于NHibernate.Tool.hbm2ddl
命名空间中,可以在Nhibernate.dll文件中找到.
SchemaUpdate在nhibernate 1.0.2工具集指南的第15章中提到了这里(第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); }