📜  NHibernate-建筑(1)

📅  最后修改于: 2023-12-03 15:33:07.437000             🧑  作者: Mango

NHibernate-建筑

什么是 NHibernate

NHibernate 是一个开源的 ORM(Object-Relational Mapping,对象关系映射)框架,用于在 C#/.NET 平台下对关系型数据库进行操作。NHibernate 最初追随 Java 平台的 Hibernate ORM框架,并逐渐成长为一个功能强大,易于扩展和高度可配置的 .NET ORM 框架。

NHibernate 的优势
  1. 可以极大地简化开发过程,提高开发效率。
  2. 可以避免针对每个关系型数据库编写特定的 SQL 语句。
  3. 可以更轻松地进行 CRUD(Create,Read,Update,Delete)操作。
  4. 可以摆脱直接使用 ADO.NET 需要面对的一系列问题,如耦合性过强,难以维护等。
NHibernate 的架构

NHibernate 的架构分为四层:

  1. 数据库连接层(ADO.NET)
  2. 持久化层(NHibernate)
  3. 实体层(Domain Model)
  4. 应用层(UI/Business)

其中,持久化层是 NHibernate 主要的功能提供者,它主要负责将实体对象映射到数据库中,实现了数据库与对象的交互。实体层是指开发人员在设计领域模型时使用的类和对象,承载了业务逻辑。应用层则负责对用户界面和领域模型进行协调。

NHibernate 的基本使用
1. 配置文件

NHibernate 的配置文件通过 XML 文件进行配置,主要有以下几个关键节点:

  • session-factory:包含基本信息配置(连接字符串、驱动等);
  • mapping:指定 ORM 映射文件的位置。

以下是一个简单的 NHibernate 配置示例:

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string">server=.;database=test;uid=sa;pwd=123456</property>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <mapping assembly="NHibernateApp.Domain" />
    </session-factory>
</hibernate-configuration>
2. ORM 映射文件

ORM 映射文件用于将实体类映射到数据库中的表和字段上,其基本结构如下:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateApp.Domain"
                   namespace="NHibernateApp.Domain">
  <class name="User" table="Users">
    <id name="Id" type="Int32" column="Id">
      <generator class="identity"/>
    </id>
    <property name="Name" column="Name"/>
    <property name="Age" column="Age"/>
  </class>
</hibernate-mapping>
3. 会话基础类

NHibernate 提供了 ISession 接口来完成数据库与实体的映射和管理。完成数据的 CRUD 操作,都是在会话基础类 ISession 的基础上进行的。我们可以通过以下方式来获取 ISession 对象:

ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
4. 引入事务机制

在 NHibernate 中,我们可以通过 ITransaction 接口来实现事务的管理。示例如下:

ITransaction transaction = null;
try
{
    transaction = session.BeginTransaction();
    // do something 
    transaction.Commit();
}
catch
{
    transaction.Rollback();
}
finally
{
    session.Close();
}
总结

NHibernate 是极具价值的 ORM 框架,可以大大提高 .NET 开发者的开发效率和软件质量。如果您还有兴趣,请查看 NHibernate 的官方文档以及更多的例子和实践。