我使用NHibernate 3.0和Postgres 9.0.4。当我尝试 new SchemaUpdate(cfg).Execute(scriptAction, true);
没有任何反应时。没有异常,没有SQL输出(即使提供的Action<string> scriptAction
也没有被调用)并且没有创建表。如果我使用SchemaExport,一切都会像魅力一样。所以我假设我的配置和映射是正确的。
我阅读了有关NHibernate 2.something.something和Postgres 8.something以及SchemaUpdate的使用组合的问题。任何人都可以确认SchemaUpdate仍然无法用于Postgres和NHibernate的新版本,甚至更好,是否有人可以指导我解决我的问题?
提前致谢。
编辑:
实际上有一些例外,正如我最近发现的那样。 SchemaUpdate不会抛出它们,而是将它们存储在Exceptions属性中。
我在System.NotSupportedException
中得到两个NHibernate.Dialect.Dialect.GetDataBaseSchema(DbConnection connection)
而没有其他数据,这表明SchemaUpdate不能与PostgreSQL一起使用,但如果是这样的话,某人已经找到了。我试过了,.PostgreSQLDialect
和.PostgreSQL82Dialect
都无济于事。
答案 0 :(得分:2)
您可以升级到最新版本吗?看起来DataProvider / Dialects组件在NHibernate 3.2.0 GA中为Postgre进行了重大升级。
构建3.2.0.GA(rev6000)
=============================**改进
* [NH-2571] - 完整的PostgreSQL支持
不确定这是否有帮助。如果您使用Fluent(最新版本适用于NH 3.1.0),您仍然不幸。
更新:您使用了哪种Fluent源?我只是downloaded from Github并且用NH 3.2.0编译得很好。事实上,the NHibernate section已于8月11日更新,消息“将NHibernate 3.x程序集更新为3.2”。
由于外部装配取决于NH 3.1.0,我无法转移到新版本。我所做的是使用SchemaExport.Create( Action<string>, false )
将DDL写入文本文件。我知道已经改变的映射,我手动修改数据库以匹配NH认为它应该是什么样子。这很难看,但如果你在极少数情况下只做了一些改动,那就可行了。
答案 1 :(得分:1)
我几乎自己回答了这个问题。
对nhibernate 3.0.0GA版源代码的简要检查表明,.PostgreSQLDialect
确实没有覆盖基类'GetDataBaseSchema(DbConnection connection)
方法,因此抛出System.NotSupportedException
而没有{{1 Postgres方言存在实现者。奇怪的是,NHibernate文档没有提到这个小细节。
答案 2 :(得分:1)
你使用HBM或FluenetNHibernate Mapping,NHibernate 3.2解决你的问题。
但是你在NHibernate 3.2中使用了Loquacious Code Mapping,发生了同样的问题。