一、创建C#控制台程序,添加C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2\MySql.Data.dll;
二、方式1:从NHibernate官网(https://nhibernate.info/)下载,找到NHibernate.dll,添加该引用;
方式2:鼠标右键该程序,选择“管理NuGet程序包(N)...”,联机搜索Nhibernate,下载并安装之;
三、添加nhibernate数据库连接配置 “鼠标右键——添加——XML文件——hibernate.cfg.xml” ,然后把下面的代码片段粘贴进去;
(注意:配置文件hibernate.cfg.xml的属性中,复制到输出目录应选择:始终复制)
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MySQL5Dialect</property> <!--使用MySQL5的版本-->
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property> <!--使用什么数据库-->
<property name="connection.connection_string">Server=localhost;Database=mygamedb;User ID=root;Password=root;</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
四、进行类和表的映射:
1.鼠标右键添加文件夹Model,文件夹下添加类User:
using System;
namespace Sikiedu.Model
{
public class User
{
public virtual int Id { get; set; }
public virtual string Username { get; set; }
public virtual string Password { get; set; }
public virtual DateTime Registerdate { get; set; }
}
}
2.鼠标右键添加文件夹Mappings,文件夹下添加配置文件User.hbm.xml :
(注意:配置文件User.hbm.xml的属性中,生成操作应选择:嵌入的资源)
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Sikiedu"
namespace="Sikiedu.Model">
<class name="User" table="users">
<id name="Id" column="id" type="Int32">
<generator class="native"></generator>
</id>
<property name="Username" column="username" type="String"></property>
<property name="Password" column="password" type="String"></property>
<property name="Registerdate" column="registerdate" type="Date"></property>
</class>
</hibernate-mapping>
3.鼠标右键,点击生成。
4.解析配置文件,填写Program.cs:
namespace Sikiedu
{
class Program
{
static void Main(string[] args)
{
var configuration = new Configuration();
configuration.Configure();//解析nhibernate.cfg.xml
configuration.AddAssembly("Sikiedu");//解析 映射文件 User.hbm.xml
Console.ReadKey();
}
}
}
五、创建会话session,进行添加数据操作,Program.cs:
using System;
using NHibernate;
using NHibernate.Cfg;
using Sikiedu.Model;
namespace Sikiedu
{
class Program
{
static void Main(string[] args)
{
var configuration = new Configuration();
configuration.Configure();//解析nhibernate.cfg.xml
configuration.AddAssembly("Sikiedu");//解析 映射文件 User.hbm.xml
ISessionFactory sessionFactory = null;
ISession session = null;
try
{
sessionFactory = configuration.BuildSessionFactory();
session = sessionFactory.OpenSession();//打开一个跟数据库的会话
User user = new User() { Username = "fafdafd", Password = "43143" };
session.Save(user);
}
catch(Exception e)
{
Console.WriteLine(e);
}
finally
{
if(session!=null)
{
session.Close();
}
if(sessionFactory!=null)
{
sessionFactory.Close();
}
}
Console.ReadKey();
}
}
}
六、利用NHibernate进行事务操作
static void Main(string[] args)
{
var configuration = new Configuration();
configuration.Configure();//解析nhibernate.cfg.xml
configuration.AddAssembly("Sikiedu");//解析 映射文件 User.hbm.xml
ISessionFactory sessionFactory = null;
ISession session = null;
ITransaction transaction = null;
try
{
sessionFactory = configuration.BuildSessionFactory();
session = sessionFactory.OpenSession();//打开一个跟数据库的会话
//User user = new User() { Username = "fafdafd", Password = "43143" };
//session.Save(user);
//事务
transaction = session.BeginTransaction();
//进行操作
User user1 = new User() { Username = "dfalfjasf", Password = "345436" };
User user2 = new User() { Username = "dfalffadfa", Password = "345436" };
session.Save(user1);
session.Save(user2);
transaction.Commit();
}
catch(Exception e)
{
Console.WriteLine(e);
}
finally
{
if(transaction!=null)
{
transaction.Dispose();
}
if(session!=null)
{
session.Close();
}
if(sessionFactory!=null)
{
sessionFactory.Close();
}
}
Console.ReadKey();
}
七、创建NHibernateHelper管理会话工厂,NHibernateHelper.cs:
using NHibernate;
using NHibernate.Cfg;
namespace Sikiedu
{
class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if(_sessionFactory==null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly("Sikiedu");
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}
八、创建管理类,处理CRUD操作
鼠标右键添加文件夹Manager,文件夹下添加接口IUserManager和类UserManager:
using System.Collections.Generic;
using Sikiedu.Model;
namespace Sikiedu.Manager
{
interface IUserManager
{
void Add(User user);
void Update(User user);
void Remove(User user);
User GetById(int id);
User GetByUsername(string username);
ICollection<User> GetAllUsers();
}
}
using System;
using System.Collections.Generic;
using Sikiedu.Model;
using NHibernate;
namespace Sikiedu.Manager
{
class UserManager : IUserManager
{
public void Add(User user)
{
//ISession session = NHibernateHelper.OpenSession();
//session.Save(user);
//session.Close();
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(user);
transaction.Commit();
}
}
}
}
}
using System;
using NHibernate;
using NHibernate.Cfg;
using Sikiedu.Model;
using Sikiedu.Manager;
namespace Sikiedu
{
class Program
{
static void Main(string[] args)
{
User user = new User() { Username = "吉吉国王", Password = "fdagad" };
IUserManager userManager = new UserManager();
userManager.Add(user);
Console.ReadKey();
}
}
}
......
......