NHibernate系列研究节能
民生视野 2020-10-25 04:47 字号: 大 中 小
什么是 NHibernate
NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。
NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。
为什说:“认识你这么长时间么写这个
任何熟悉Hibernate的人会发现这篇文章和Glen Smith 的 A Hitchhiker's Guide to Hibernate 非常相近。这里的内容正是基于他的指南,因此所有的感谢都应该给与他。
NHibernate的文档并非每处都和Hibernate的文档一致。然而,项目的相似应该能使读者通过读Hibernate的文档来很好的理解NHibernate如何工作。
这篇文章意在让你尽可能快的开始使用NHibernate。它将介绍如何持久化一个简单的对象到一张表里。想得到更多的复杂的例子,可以参考NUnit测试及附带代码。
开发的过程
Nhibernate未来将会提供一些工具帮助你自动产生schema文件(现在还是基于代码)或是通过映射文件产生类(在筹措阶段)或是更新schema(来自于一个新开发者的建议)。然而,这里我们的例子是假定一切来自于完全手写,包括设置表和.Net类的编写。我们将进行以下步骤。
1.新建一个将要持久化.Net对象的表
2.构建一个需要被持久化的.Net类
3.构建一个可以让NHibernate知道如何持久化对象属性的映射文件
4.构建一个让NHibernate知道如何连接数据库的配置文件]
5.使用NHibernate的 API
第一步:写构建表的 SQL
这里我们将使用的是一个非常简单的例子。假设你正在为你的站开发一个基本的用户管理子系统。我们将使用如下的一张User表(假定你已经设置好一个数据库—在的例子里我称它为NHibernate)。
use NHibernate
go
CREATE TABLE users(
LogonID nvarchar ( 20 ) NOT NULL default ' 0 ' ,
Name nvarchar ( 40 ) default NULL ,
Password nvarchar ( 20 ) default NULL ,
EmailAddress nvarchar ( 40 ) default NULL ,
LastLogon datetime default NULL ,
PRIMARY KEY (LogonID)
)
go
我使用的是MS Sql Server 2000, 但也可以使用任何数据库,只要你有关于它们的基于.Net数据提供驱动程序。我们将得到一个含有LogonID,Name, Password, Email 和LastLogon的表. 经过以上标准步骤,我们下一步是写一个.Net类处理一个给定的User对象。
第二步:产生一个.Net 类文件
当内存中有一堆User对象的时候,我们需要某种对象去保存它们。NHibernate通过对象属性的反射来工作,因此我们需要添加我们希望持久化的对象属性。一个可以被NHibernate持久化的类应该看起来象下面的样子:
using System;
namespace ickStart
{
public class User
{
private string id;
private string userName;
private string password;
private string emailAddress;
private DateTimelastLogon;
public User()
{
}
public string Id
{
get { return id;}
set {id = value;}
}
public string UserName
{
get { return userName;}
set {userName = value;}
}
public string Password
{
get { return password;}
set {password = value;}
}
public string EmailAddress
{
get { return emailAddress;}
set {emailAddress = value;}
}
public DateTimeLastLogon
{
get { return lastLogon;}
set {lastLogon = value;}
}
}
}
在上面的例子里,我们的属性和构建函数 是public,但这个对NHibernate不是必要的.它可以使用public, protected, internal或者甚至是用private来持久化数据。
第三步:写映射文件
现在我们有数据表和需要去映射它的.Net类。我们需要一种方式去让NHibernate知道如何从一个映射到另一个。这个任务依赖于映射文件来完成。最易于管理的办法是为每一个类写一个映射文件,如果你命名它是l 并且把它放在和类的同一个目录里,NHiberante将会使得事情简单起来。下面是一个l的例子:
? xmlversion="1.0"encoding="utf-8" ?
hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0"
class name ="er,amples" table ="users"
id name ="Id" column ="LogonId" type ="String" length ="20"
generator class ="assigned" /
/ id
property name ="UserName" column ="Name" type ="String" length ="40" /
property name ="Password" type ="String" length ="20" /
property name ="EmailAddress" type ="String" length ="40" /
property name ="LastLogon" type ="DateTime" /
/ class
/ hibernate-mapping
让我们来看看这个文件中让我们感兴趣的某些行。第一个有趣的标签是class。这里我们将映射类型名称(类名和装配件)到我们数据库中的User表,这里和Hibernate有一点点的不同。你将不得不告诉NHibernate从何处提取对象。在这个例子里我们从装配件amples装载类er 。NHibernate 遵循和.Net Framework同样的规则来加载类型。因此如果你在如何指定类型的方面有些混淆,请参看.Net Framework SDK。
让我们先跳过id标签,来讨论property标签。简要看一下,你将发现NHibernate所要做的工作。name属性的值正是我们.Net 类的属性,column属性值将是我们数据库里的字段。type属性是可选的(如果你不标明,NHibernate将利用反射进行最佳的推测)。
好了,让我们回到标签id, 你可以猜测到这个标签将是映射数据库表的主键,的确如此,id标签的组成和我们刚才看的property标签是相似的。我们映射属性到目标数据库的字段。
内嵌的generator 标签告诉NHibernate 如何生成主键(它将恰当的为你生成主键,不管你指定何种类型,但你必须告诉它)。在我们的例子里,我们设定为assigned,意味着我们对象将自己生成主键(毕竟User对象常常需要一个UserID)。如果你执意要NHiberante为你生成主键,你感兴趣于设定x和ring(从文档中获取更多信息)
提示:如果你使用Visual 去编译的话,请将l的Build Action属性设置为Embedded Resource。映射文件将成为装配件的一部分。更详细的细节重点将在后面展示。
提示:如果你仅仅是改变映射文件,你不能使用build 而应该Rebuild项目。Visual 不会重新编译有改变的映射文件。
Trackback:
颌面外科小儿支气管炎朔州较权威的白癜风医院-
-
无奈切尔西屠龙刀变切菜刀莫拉塔他急死孔蒂搭配
无奈!切尔西屠龙刀变切菜刀 莫拉塔+他急死孔蒂巴舒亚伊表...
2020-06-05 | 民生视野
-
-
孔蒂穆里尼奥蔑视我那我也会把蔑视送给他搭配
孔蒂:穆里尼奥蔑视我也就是二流生源。?那我也会把蔑视送给...
2020-06-01 | 民生视野
-
-
FIFA警告加纳别取消足协不然开始制裁你搭配
FIFA警告加纳:别取消足协 不然开始制裁你们国际足联要求加...
2020-05-29 | 民生视野
-
-
房子能有哪些噪音如何处理搭配
房子能有哪些噪音,如何处理?一、什么是噪音?客户买房都希...
2020-05-26 | 民生视野
-
-
碧江区民政局认真组织收看全国社会组织统一
碧江区民政局认真组织收看全国社会组织统一社会信用代码工...
2019-12-17 | 民生视野
-
-
市委常委组织部长赵斌来我县调研村级公司化
市委常委、组织部长赵斌来我县调研村级公司化经营工作3月9...
2019-07-13 | 民生视野