📝 NHibernate教程
30篇技术文档📅  最后修改于: 2020-11-19 05:36:35        🧑  作者: Mango
在本章中,我们将讨论映射组件。在NHibernate中,component是一个值对象。它没有自己的身份。这样的例子是货币对象,钱包或钱包中可能有货币,但是该货币的确切身份无关紧要。它没有自己的主键,但组件本身与拥有对象在同一表中是持久性的。让我们看一个简单的示例,其中学生有一个地址,该地址是与之关联的Location类的对象。现在,我们还需要通过执行以下查询来更新数据库,这将首先删除Studen...
📅  最后修改于: 2020-11-19 05:37:55        🧑  作者: Mango
在本章中,我们将研究NHibernate中的关系。让我们将注意力转向如何理解NHibernate中的关系。最简单的方法是从数据库角度考虑关系。我们将首先创建一个新的应用程序,在其中将在客户和订单实体之间创建一些关系。我们要看的第一个关系是经典的收藏关系。我们有一个带有订单集合的客户。这是一对多的关系,在数据库中由2个表表示,在orders表上有一个客户ID,我们与客户之间有一个外键关系。首先,我们...
📅  最后修改于: 2020-11-19 05:38:31        🧑  作者: Mango
在本章中,我们将介绍如何表示集合。我们可以在NHibernate中使用不同类型的集合,例如-清单套装包袋现在,从.NET的角度来看,我们通常处理列表或类似非常简单的数据结构,列表,字典。 .NET没有各种各样的不同集合类型。那么,NHibernate为什么需要所有这些不同的类型?它确实返回到数据库。清单列表是不一定唯一的元素的有序集合。我们可以使用IList <T>映射它。因此,尽管我们通常可以有...
📅  最后修改于: 2020-11-19 05:39:12        🧑  作者: Mango
在本章中,我们将介绍如何使用Cascade功能。如果您有一组商品或一组商品,或者两个类别(例如我们的客户和订单)之间存在关系,并且具有外键关系。如果默认情况下删除客户,则NHibernate不会对子对象执行任何操作,因此属于该客户的对象可能会孤立订单。我们也可能违反外键约束,因此我们可以使用级联的概念。默认情况下,NHibernate不会将操作级联到子对象。这样做的原因是,您可以拥有诸如具有默认送...
📅  最后修改于: 2020-11-19 05:39:54        🧑  作者: Mango
在本章中,我们将介绍延迟加载功能。默认情况下,这是一个完全不同的概念,NHibernate不会延迟加载,例如,如果加载客户,则不会加载所有订单。订单集合将按需加载。默认情况下,任何关联(无论是多对一还是集合)都是延迟加载的,都需要一个Open ISession。如果关闭了会话或提交了事务,则可能会出现延迟加载异常,该异常无法拉入那些其他对象。您必须注意延迟加载以及实际需要多少数据。您可以关闭整个关...
📅  最后修改于: 2020-11-19 05:40:39        🧑  作者: Mango
在本章中,我们将介绍另一个功能,即逆关系。这是一个有趣的选项,您会在集合中看到它与true相反,并且还使很多开发人员感到困惑。因此,让我们谈谈这个选项。要理解这一点,您确实必须考虑关系模型。假设您有一个使用单个外键的双向关联。从关系的角度来看,您有一个外键,它既代表要订购的客户,又代表对客户的订单。在OO模型中,您可以使用这些引用进行单向关联。没有什么可以说两个单向关联表示数据库中相同的双向关联。...
📅  最后修改于: 2020-11-19 05:41:17        🧑  作者: Mango
在本章中,我们将介绍“加载”和“获取”功能的工作方式以及如何使用它们。这是ISession提供的两个非常相似的API,用于通过主键加载对象。Get-将返回对象或null。加载-它会返回对象,或者抛出ObjectNotFoundException。现在,为什么我们要使用这两个不同的API?加载这是因为Load可以更有效地优化数据库往返。实际上,Load会返回一个代理对象,并且在发出该Load调用时不...
📅  最后修改于: 2020-11-19 05:42:02        🧑  作者: Mango
在本章中,我们将介绍人们将使用的另一个常见API,即NHibernate LINQ提供程序。通过ISession上的扩展方法和签名对其的访问是Query <T>。使用LINQ时有两种语法:查询链接语法查询理解语法查询链接语法您可以使用方法链语法访问数据库中的任何记录,如以下程序所示。您可以看到我们有查询,还有WHERE子句,可以有其他WHERE子句和类似的select子句。这是可以在普通LINQ中...
📅  最后修改于: 2020-11-19 05:42:44        🧑  作者: Mango
在本章中,我们将介绍Hibernate查询语言。 HQL在Java的Hibernate和NHibernate之间共享。它与Criteria一起是最古老的查询机制。它很早就实现了,它是一个基于字符串的查询API。您可以通过ISession CreateQuery访问它,它几乎类似于SQL。它使用许多相同的关键字,但语法简化。这是最常见的示例之一,如果您正在寻找如何执行查询的方法,则经常会发现HQL示...
📅  最后修改于: 2020-11-19 05:43:16        🧑  作者: Mango
在本章中,我们将介绍标准查询机制。通过NHibernate按条件查询API,您可以在运行时通过处理条件对象来构建查询。这种方法使您无需直接进行字符串操作即可动态指定约束,但是它不会损失HQL的灵活性或功能。另一方面,表达为标准的查询通常比HQL表达的查询可读性差。经典标准语法是基于对象的查询API,如以下程序所示。如您所见,我们正在为客户执行会话创建条件,现在我们正在向该查询添加限制对象。这对查询...
📅  最后修改于: 2020-11-19 05:43:50        🧑  作者: Mango
在本章中,我们将介绍QueryOver查询。它是一种新语法,更类似于使用以下查询所示的方法链语法的LINQ。它仍然是标准,但是现在我们的查询已被强类型化。正如我们在条件查询中所看到的那样,名字只是一个不透明的字符串,现在我们实际上使用的是x.FirstName,因此名字的名称被重构和重命名,在链接样式条件查询中使用。我们仍然可以做很多类似的事情,但是您不能在查询结束时使用查询理解语法,必须使用方法...
📅  最后修改于: 2020-11-19 05:44:19        🧑  作者: Mango
在本章中,我们将介绍如何在NHibernate中使用本机SQL查询。如果您已经使用手写SQL多年了,您可能会担心ORM会剥夺您惯用的一些表现力和灵活性。NHibernate强大的查询功能使您几乎可以执行SQL中的所有操作,在某些情况下还可以执行更多操作。在极少数情况下,您无法使用NHibernate自己的查询工具来执行所需的操作。NHibernate允许您使用数据库的本地SQL方言检索对象。让我们...
📅  最后修改于: 2020-11-19 05:44:48        🧑  作者: Mango
在本章中,我们将介绍流利的NHibernate。流利的NHibernate是另一种映射方式,或者您可以说它是NHibernate的标准XML映射文件的替代方法。而不是编写XML(.hbm.xml文件)文档。借助Fluent NHibernate,您可以使用强类型的C#代码编写映射。在Fluent NHibernate中,映射与应用程序的其余部分一起被编译。您可以轻松地更改映射,就像您的应用程序代码...
📅  最后修改于: 2020-11-19 05:45:04        🧑  作者: Mango
以下资源包含有关NHibernate的其他信息。请使用它们来获得有关此方面的更深入的知识。NHibernate上的有用链接NHibernate Wiki–NHibernate的维基百科参考。关于NHibernate的有用书籍要在此页面上注册您的网站,请发送电子邮件至...
📅  最后修改于: 2020-11-19 05:45:17        🧑  作者: Mango
NHibernate是一个针对.NET框架而积极开发的,功能全面的开源对象关系映射器。它已用于成千上万的成功项目中。它基于ADO.NET构建,当前版本是NHibernate 4.0.4。本教程将使您了解如何开始使用NHibernate。主要目标是完成它之后,您将对NHibernate是什么以及为什么需要NHibernate有了更好的了解,当然还学习了如何将NHibernate添加到项目中。...