第一步
对项目导入mysql.data和Nhibernate包,可以使用Nuget导入,直接搜索就行,或者是从外部添加引用直接到显目里面
第二步
在项目里新建两个文件夹,一个叫Model一个叫Mapping,model里放与对应表关联的数据类,一个装该表与类的配置文件
与数据库关联的类如下
例子 用户表
注意 每一个成员变量都必须是virtual,不然会报错
class User
{
public virtual string username { get; set; }
public virtual string password { get; set; }
}
配置文件如下 例子
名字格式必须是 类名.hbm.xml (重要),文件属性必须是如图所示,不然会报找不到该文件的错
好的那么继续
注意 class name 必须是你的类的名字,table 必须是数据库中表的名字,不能写错
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MyTurnGameServer"
namespace="MyTurnGameServer.Model">
<!-- 项目所在的程序集;该配置文件所关联的User.cs类所在的名称空间 -->
<class name="User" table="users">
<!-- 指定名称空间下的User类,要与数据库中的user表映射 -->
<id name="username" column="username" type="String"> </id>
<property name="password" column="password" type="String"/>
<!-- 只有主键用id,其他字段都用property -->
<!--<property name="characterNumber" column="characterNumber" type="Int32"/>-->
</class>
</hibernate-mapping>
第三步
添加连接数据库的配置文件,也要采用特殊的命名格式,不过是特定的 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>
<!-- 数据库的版本 -->
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<!-- 使用什么数据库 -->
<property name="connection.connection_string">Server=127.0.0.1;Port = 3306;Database=turned-base-game;User ID=root;Password=123456</property>
<!-- 端口号缺省值为3306 -->
<property name="show_sql">true</property>
<!-- 是否打印执行的SQL语句 -->
<!-- 坑点:如果当前解决方案下有多个项目,一定要指定程序集! -->
<!--
<mapping assembly="nhibernateToMysql"/>-->
</session-factory>
</hibernate-configuration>
以上配置文件可以直接复制,改下ip和用户名密码即可
第四步
在程序中读取配置文件,并设置好会话工厂
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate.Cfg;
using NHibernate;
namespace MyTurnGameServer
{
class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
Configuration configuration = new Configuration();
configuration.Configure();
//添加程序集,必须是你作为主入口函数的那个程序集
configuration.AddAssembly("MyTurnGameServer");
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession Session
{
get
{
//获得会话
return _sessionFactory.OpenSession();
}
}
}
}
第五步
配置好管理器,开始对数据库操作
例子对users表进行增删改查
using System;
using System.Collections.Generic;
using MyTurnGameServer.Model;
using MyTurnGameServer.IManager;
using NHibernate;
using NHibernate.Criterion;
using MyTurnGameServer;
namespace MyTurnGameServer.Manager
{
class UserManager : IUserManager
{
//添加用户
public void Add(User user)
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
if (!VerifyUser(user.username))
{
session.Save(user);
transaction.Commit();
}
else
{
Console.WriteLine("用户存在");
}
}
}
}
//删除用户
public void Delete(User user)
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Delete(user);
transaction.Commit();
}
}
}
//获得所有用户
public ICollection<User> GetAllUsers()
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
IList<User> users = session.CreateCriteria(typeof(User)).List<User>();
return users;
}
}
//通过用户名获得用户
public User GetUserByUserName(string username)
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
User user = session.CreateCriteria(typeof(User))
.Add(Restrictions.Eq("username", username)).
UniqueResult<User>();
return user;
}
}
//更新用户
public void Update(User user)
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(user);
transaction.Commit();
}
}
}
//验证用户
public bool VerifyUser(string username, string password)
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
User user = session.CreateCriteria(typeof(User))
.Add(Restrictions.Eq("username", username))
.Add(Restrictions.Eq("password", password))
.UniqueResult<User>();
if (user == null)
return false;
else
return true;
}
}
//通过用户名验证用户
public bool VerifyUser(string username)
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
User user = session.CreateCriteria(typeof(User)).
Add(Restrictions.Eq("username", username)).UniqueResult<User>();
if (user == null)
{
//用户不存在;
return false;
}
else
{
//用户存在
return true;
}
}
}
}
}
第六步
现在你对nhibernate应该有所了解了,后面有特殊需求参照以上内容修改即可,如果想要更深入的了解可以去看看官方的文档,比较详细,请自备翻译软件