NHibernate的SchemaUpdate在PostgreSQL数据库上什么都不做

时间:2011-08-31 17:09:03

标签: c# nhibernate postgresql

我使用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都无济于事。

3 个答案:

答案 0 :(得分:2)

您可以升级到最新版本吗?看起来DataProvider / Dialects组件在NHibernate 3.2.0 GA中为Postgre进行了重大升级。

来自the release notes

  

构建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,发生了同样的问题。