关于使用Nhibernate连接数据库的一些总结

第一步

      对项目导入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应该有所了解了,后面有特殊需求参照以上内容修改即可,如果想要更深入的了解可以去看看官方的文档,比较详细,请自备翻译软件

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值