2011-06-16 65 views
8

我们使用NHibernate取得了Firebird后端的巨大成功。我的问题与Firebird支持的NHibernate中提供的功能有关。如果您对Firebird和NHibernate有任何专业知识,欢迎您提出意见。NHibernate与Firebird ...是否启用了这些功能?

  1. Firebird是否支持“未来”查询?从我的阅读中可以看出,Firebird是少数不支持该功能的数据库之一。有没有人有一个解决方法,因为“未来”将是一个很好的功能使用。

  2. Firebird是否支持NHibernate功能“prepare_sql”。出于某种原因,我无法让它在Firebird中工作,并不断收到关于参数大小不相等的警告(在Nhibernate Profiler中)。

  3. Firebird是否支持批处理?在NHibernate映射中,我们指定了批处理,但是在profiler中看不到任何证据。

对于那些有兴趣的人,我们使用Fluent NHibernate来配置NHibernate。一切正常,我们对ORM有很大的控制权,但只需要澄清一下上述问题。

您的想法?

回答

1

据我所知,批处理仅支持MsSql和Oracle。甚至连MySql都没有批处理支持。

您可以随时下载NH源代码并查看是否支持这些功能。 国际海事组织火鸟近年来不是很受欢迎,并且有可能没有太多的意图在NH为火鸟带来这些功能。

1

“未来”是NHibernate的一个特性。根据我所理解的about futures,数据库功能需要将多个语句在一个批次(往返)中发送到服务器,并将结果也一批接收回来。

我想Firebird不允许这样做,因为你必须单独准备和执行语句。

尽管如果您只是插入/更新/删除,您可以将这些语句分组在execute block语句中,但它只能返回一个结果集。

要得到明确的答案,请务必在firebird-support邮件列表中询问。

+0

执行块可以返回行。每个“暂停”都会将当前的一组输出参数作为结果行返回。有点像迭代器方法在一些.net语言中工作。这样足够的输出参数和每条语句之后的暂停,并且应该有一个基础来为Firebird实现此功能。 – 2011-07-09 18:35:47

+0

当然,我只是在想,使用“execute block”也不是一个非常优雅的解决方案,因为您需要声明输出参数,以适应块中不同语句的所有可能不同的结果行。有点像联合声明中匹配列类型的要求。但我同意,应该可以通过这种方式来实现它:) – magnoz 2011-07-14 16:34:35