对于nhibernate的api参考在哪里?

时间:2010-04-27 06:53:49

标签: nhibernate api reference

我可能会精神错乱,但我找不到任何关于nhibernate的api参考资料。我发现了很多手册,教程,电子书等,但没有api参考。我在nhibernate sourceforge页面上看到了chm文件,但它似乎不适用于我的任何PC(不同的操作系统)

有人可以指出我正确的方向吗?

4 个答案:

答案 0 :(得分:8)

我刚发现了这个:

http://web.archive.org/web/20141001063046/http://elliottjorgensen.com/nhibernate-api-ref/index.html

它似乎不是官方的,但至少它看起来像一样的API参考...不像官方参考,它主要描述概念和映射,没有任何关于类和成员的信息。

答案 1 :(得分:1)

如果您使用的是Windows,请获取ILSpy并将其指向NHibernate.dll。它与真正的API文档并不完全相同,但它并不是一半坏。

答案 2 :(得分:1)

据我所知,互联网上没有公开提供的课程参考资料。您可以从源代码构建它。克隆them,构建NHibernate.sln解决方案,然后进入doc文件夹,确保您在reference\readme.txt文件中指明了先决条件,然后运行nant doc。这将在build文件夹中生成类引用。

否则最常用的API并不宽,并且大多数都是使用Visual Studio中的intellisens记录的xml。 reference documentation具有提供更多上下文的优势,可能有助于避免陷阱,例如相信ISession.Update将被用于更新实体(这是错误的,除非您使用分离的实体或实体,否则不需要它来自另一场会议。)

官方documentation reference位于https://nhibernate.info

子链接:

  • Global documentation list
  • Reference(我主要使用的是什么,特别是在子部分之后。)
    • Configuration
    • Mapping - basic / entities。 (在任何或您的解决方案文件夹中添加映射xsd定义文件,以便让VS了解它并在您的hbm映射中为您提供智能。)
    • Mapping - collections
    • Querying - general。不要错过The IQuery interface中的命名查询功能。
    • 查询API:
      1. HQL。对于不动态构建的查询,我主要在映射中使用带有命名查询的HQL。在构建会话工厂时会对它们进行解析和验证,这通常发生在应用程序启动时,因此它几乎与编译时验证一样好。检查log4net日志以获取命名查询解析失败的详细原因。
      2. Criteria API。我认为它是在代码中动态构建查询的历史方法,比构建HQL字符串更受欢迎。
      3. QueryOver API。基于Criteia API,lambda表达式支持对查询实体命名进行编译时验证。在我看来,应优先于Criteria API。
      4. Linq API。非常适合动态构建的查询。请记住,它的实现会将您的查询转换为HQL。对于复杂查询,它可能会生成不受支持的HQL构造。了解HQL功能可以更好地理解如何为复杂案例编写受支持的Linq查询。 (例如,对于复杂的顺序,更好地使用OrderBy中的显式linq子查询,而不是使用映射到查询实体上的集合。)
      5. Native SQL。好吧,相当不言自明。当您需要通过其他查询API(SQL服务器全文,选择xml,...)无法获得的SQL特殊功能时,可以通过示例使用,并且您不希望扩展其他API。您也可以调用存储过程。使用本机SQL时,我更喜欢SQL命名查询。
    • Modifying data,从Updating objectsFlushException handling
    • Performances
      1. Batch fetching。关于这一点,您可以阅读my post here,详细解释为什么延迟加载对NHibernate非常有效,这要归功于批量提取。这个单一的功能总是让我更喜欢NHibernate而不是实体框架,直到它不再缺乏EF。
      2. Second level cache。另一个很棒的NHibernate功能,在EF中缺乏原生支持。请注意,您必须使用交易来利用这一点。它允许NHibernate在您通过应用程序进程更改数据时自动驱逐缓存条目。如果没有事务,NHibernate会在您开始更改数据时立即禁用二级缓存,以避免让缓存产生过时的数据。
    • Interceptors。这是许多允许定制NHibernate内部工作的方法之一。 NHibernate非常强大,允许您扩展它。您也可以将自己的HQL扩展名添加为here,将您自己的linq2NH扩展名添加为here(所有这些都是我的答案)。还有其他方法,请参阅list了解linq2NH可扩展性解决方案。

此外,类引用很可能在Hibernate one附近。有很多内部API支持它的实现,但是没有多少用处。

为什么不隐藏此类API(内部,私有,......)?不需要隐藏它们就可以实现NHibernate的高扩展性。在我看来,这些能力是必须的。相比之下,由于缺乏可扩展性,他们很难解决其他.Net项目的缺点。 (MVC FileResult and the TweakDispositionAsInline我必须使用而不是仅仅覆盖某些方法,或尝试扩展,请参阅this。)

答案 3 :(得分:0)

有一本很好的书,很多,网站上有html文档(也是一本书)

(这本书将是manning - nHibernate in Action - 有点过时,但是一个好的开始)

以下是在线参考的link