随笔 - 547  文章 - 213 评论 - 417 阅读 - 107万

本篇文章是NHibernate的入门教程。

1. 安装。
在应用NHibernate之前,必须安装它。具体步骤为:
(1) 打开网站http://nhforge.org/.
(2) 点击“Download”标签页,点击“Core”标签,然后点击“NHibernate 3.0.0 Binaries”链接。在打开的页面中点击页面右上角的“Download”按钮。
                   image

                   image
(3) 下载并保存到本地。解压缩。安装就这么简单的完成了!
         在这里你将会注意到解压缩后的文件夹中有几个子文件夹,在这里简单介绍一下:
          image 
          a. Configuration_Templates. 针对不同数据库的配置模板,可以直接将这里面的内容拷贝到配置文件中使用,只需更改一两个设置,非常方便。
          b. Required_Bins. 核心DLL, 添加引用时会用到。
          c.  Required_For_LazyLoading. 配置proxy factory的时候会用到,后面会讲到。
          d.  Tests. 测试相关的DLL.

2. 创建Visual Studio项目。
(1)创建一个Windows Console Application.
  (2) 右击项目,然后选择“添加引用”,定位到刚才解压后的文件夹。然后选择NHibernate.DLL文件。点击OK添加引用。
       在这里需要注意的是引用要从NHibernate安装目录下的Required_Bins,这样NHibernate会自动加载和拷贝相关的DLL和文件。
  (3) 在Program.cs文件开头加上如下的引用:

using System;
using System.Reflection;
using NHibernate;
using NHibernate.Cfg;

3. 创建数据库.

CREATE DATABASE TestNHibernate
GO

4.  创建数据表.

USE TestNHibernate
GO
CREATE TABLE SiteUser(
id int identity primary key,
loginname varchar(50),
displayname varchar(50)
)
GO

创建后的数据表如下图所示:
image

5.  创建映射文件。
     a. 创建一个XML文件,并命名为SiteUser.hbm.xml. 
     b. 在SiteUser.hbm.xml中输入如下的内容:

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
auto-import="true">
  <class name="TestNHibernate.SiteUser, TestNHibernate" lazy="false">
    <id name="id" access="field">
      <generator class="native" />
    </id>
    <property name="loginname" access="field" column="loginname"/>
    <property name="displayname" access="field" column="displayname"/>
  </class>
</hibernate-mapping>

     c. 选中此XML文件,在属性栏中,将BuildAction从Content改为Embedded Resource。
         image

   6. 配置应用程序。
       a. 创建app.config文件。
       b. 将下面的内容拷贝入app.config文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- Add this element -->
  <configSections>
    <section
        name="hibernate-configuration"
        type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
        />
  </configSections>

  <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="NHibernate.Test">
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="connection.connection_string">
        Server=(local);initial catalog=TestNHibernate;Integrated Security=SSPI
      </property>
      <property name="adonet.batch_size">10</property>
      <property name="show_sql">false</property>
      <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
      <property name="use_outer_join">true</property>
      <property name="command_timeout">60</property>
      <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    </session-factory>
  </hibernate-configuration>
</configuration>

 

请注意:
i. hibernate-configuration 节点的内容可以直接从安装目录中的Configuration_Templates文件夹中拷贝。
ii. connection.connection_string节点需要换成你自己的连接字符串。

  7. 创建SiteUser实体类。

class SiteUser
{
    public int id;
    public string name;
    public string displayname;

    public string Display()
    {
        return string.Format(
        "'This is {0}.", name);
    }
}

  8.  写存取数据函数。
      a. 创建一个新的SiteUser并存入数据库。   

static void CreateSiteUserAndSaveToDatabase()
{
    SiteUser jack = new SiteUser();
    jack.name = "Jack";
    jack.displayname = "Jack Wang";

    using (ISession session = OpenSession())
    {
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Save(jack);
            transaction.Commit();
        }
        Console.WriteLine("Saved Jack to the database");
    }
}
static ISession OpenSession()
{
    if (factory == null)
    {
        Configuration c = new Configuration();
        c.AddAssembly(Assembly.GetCallingAssembly());
        factory = c.BuildSessionFactory();
    }
    return factory.OpenSession();
}
static ISessionFactory factory;

     b.  从数据库中读取一个SiteUser.

static void LoadSiteUserFromDatabase()
{
    using (ISession session = OpenSession())
    {
        IQuery query = session.CreateQuery(
        "from SiteUser as user order by user.loginname asc");
        IList<SiteUser> foundUsers = query.List<SiteUser>();
        Console.WriteLine("\n{0} site users found:",
        foundUsers.Count);
        foreach (SiteUser user in foundUsers)
            Console.WriteLine(user.Display());
    }
}

    c.  添加调用程序:

static void Main(string[] args)
{
    CreateSiteUserAndSaveToDatabase();
    LoadSiteUserFromDatabase();
    Console.WriteLine("Press any key to continue...");
    Console.ReadLine();
}

        执行结果如下:

       image

 

版权声明:本文原创发表于 博客园,作者为 今夜太冷
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

posted on   今夜太冷  阅读(1389)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示