本篇文章是NHibernate的入门教程。
1. 安装。
在应用NHibernate之前,必须安装它。具体步骤为:
(1) 打开网站http://nhforge.org/.
(2) 点击“Download”标签页,点击“Core”标签,然后点击“NHibernate 3.0.0 Binaries”链接。在打开的页面中点击页面右上角的“Download”按钮。
(3) 下载并保存到本地。解压缩。安装就这么简单的完成了!
在这里你将会注意到解压缩后的文件夹中有几个子文件夹,在这里简单介绍一下:
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
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。
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();
}
执行结果如下:
版权声明:本文原创发表于 博客园,作者为 今夜太冷
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架