























1 实体类:
Code
注意点:在属性之前要加上virtual关键字,否则运行时会报错。
2 map文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NHibernate.Examples.QuickStart.User, NHibernate.Examples.QuickStart" 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>

注意点:如果对应的是.net framework2.0的版本,则
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">是2.2
其次是class name一定要写对。前面是要映射类的全称,后面是namespase,也就是Assembly的名称。
还有在生成操作中一定要选:嵌入的资源。
1)class: name属性指示了Post实体类的类名和所在的Assebmly的名称,NH将通过反射的方式找到所指示的实体类,关于.Net的反射的说明,请参考MSDN; table属性指示了该实体所对应的数据表的表名
2)property: 指示实体属性和数据列的如何映射。name为实体的属性名称,实体的该属性可以为public/private/protected,甚至是 internal;column指示了该属性对应的数据列,若实体属性名称和数据列名称相同(忽视大小写),可以省略;type指示了实体属性的.Net 数据类型,可以省略,NH可以自动转换;length只是对string类型的属性适用,指示了字符串的最大长度。
3)id: 指示主键。NH支持自动生成主键、数据库生成主键和手工赋值三种方式,我们这里手工赋值的方式,设定generator的class="assigned"。
3 hibernate.cfg.xml—配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="nhibernate"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</configSections>

<nhibernate>
<add
key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"
/>
<add
key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect"
/>
<add
key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"
/>
<add
key="hibernate.connection.connection_string"
value="Server=192.168.0.11;database=NHibernate;uid=sa;pwd=davey@citiz.net;"
/>
</nhibernate>
</configuration>

注意:hibernate.connection.connection_string是数据库的连接字符串。
4 测试类:
using NHibernate;
using NHibernate.Cfg;
这两个是必须的。
[SetUp]
public void BuildNHibernate()
{
cfg = new Configuration();
cfg.AddAssembly("NHibernate.Examples.QuickStart");
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();

}

在使用NHibernate进行数据库操作时需要以上这些东西。
3 Insert
Code
4 update:
Code
5 select
根据主键查询
IList<User> userList = session.CreateCriteria(typeof(User)).List<User>();
有条件的查询
IList<User> recentUsers = session.CreateCriteria(typeof(User))
.Add(Expression.Expression.Eq("UserName", "Joseph Cool"))
.List<User>();

利用Hql语言查询
string hql = " from User u where u.UserName = :Name ";
IQuery query = session.CreateQuery(hql);
query.SetString("Name","Joseph Cool");
IList<User> recentUsers = query.List<User>();

6 一对多,多对多关系的查询
实体类:
Category
Code
Item
Code
类Category中包含类Item,是一对多的关系。
映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NHibernate.Examples.OneToMany.Category, NHibernate.Examples.OneToMany" table="nh_categories">
<id name="CategoryID" column="CategoryID" type="Guid"
unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid" />
</id>
<property name="Name" type="string" length="50" />
<bag name="Items" lazy="true" inverse="true" cascade= "all-delete-orphan">
<key column="CategoryID" />
<one-to-many class="NHibernate.Examples.OneToMany.Item, NHibernate.Examples.OneToMany" />
</bag>
</class>
<class name="NHibernate.Examples.OneToMany.Item, NHibernate.Examples.OneToMany" table="nh_items">
<id name="ItemID" column="ItemID" type="Guid"
unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid" />
</id>
<property name="Name" type="string" length="50" />
<many-to-one name="Category" class="NHibernate.Examples.OneToMany.Category, NHibernate.Examples.OneToMany"
column="CategoryID" />
</class>
</hibernate-mapping>

其中在Category中指定了一对多的关系:
<bag name="Items" lazy="true" inverse="true" cascade= "all-delete-orphan">
<key column="CategoryID" />
<one-to-many class="NHibernate.Examples.OneToMany.Item, NHibernate.Examples.OneToMany" />
</bag>
且指定了级联关系。
在类Item中指定了多对一的关系:
<many-to-one name="Category" class="NHibernate.Examples.OneToMany.Category, NHibernate.Examples.OneToMany" column="CategoryID" />
测试方法1(插入):
Code
测试方法2(级联删除):
Code
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。