第一步
對項目導入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應該有所瞭解了,後面有特殊需求參照以上內容修改即可,如果想要更深入的瞭解可以去看看官方的文檔,比較詳細,請自備翻譯軟件