游戏服务器搭建2(借助NHibernate)

137 阅读1分钟

《《《接上篇》》》

2、在Program.cs中利用“事务”实现对数据库的操作(数据增删改查)

首先强调一点:在事务中的多条操作中,如果有一条操作失败的话,其余的操作也无法成功执行,必须是事务中的所有操作执行成功的话整个事务才可以执行成功。 在Program.cs文件中添加以下代码实现事务功能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using NHibernate_sql.Model;

namespace NHibernate_sql
{
    class Program
    {
     
        static void Main(string[] args)
        {
            ITransaction transaction = null;
            try
            {
                transaction = session.BeginTransaction();
                //进行操作
                transaction.Commit();

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally 
            {
                if (transaction!=null)
                {
                    transaction.Dispose();
                }
            }
            Console.ReadKey();
        }
        
    }

}

3、为简化整合代码,新建UserManager.cs文件实现数据的增删改查,并新建接口IUserManager.cs。 IUserManager接口如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate_sql.Model;

namespace NHibernate_sql.Manager
{
    interface IUserManager//对User表操作的接口
    {
        void Add(Users user);
        void Updata(Users user);
        void Remove(Users user);
        Users GetById(int id);
        Users GetByUsername(string username);
        ICollection<Users> GetAllUsers();
        bool VerifyUser(string username, string password);
    }
}

UserManager.cs代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Criterion;
using NHibernate_sql.Model;

namespace NHibernate_sql.Manager
{
    class UserManager : IUserManager
    {
        public void Add(Users user)
        {
            //ISession session = NHibernateHelper.OpenSession();
            //session.Save(user);
            //session.Close();
            using (ISession session = NHibernateHelper.OpenSession())//开启session
            {
                using (ITransaction transaction = session.BeginTransaction())//开启事务
                {
                    session.Save(user);
                    transaction.Commit();
                }
            }
        }

        public ICollection<Users> GetAllUsers()
        {
            using (ISession session = NHibernateHelper.OpenSession())//开启session
            {
                IList<Users> userslist = session.CreateCriteria(typeof(Users)).List<Users>();
                return userslist;

            }
        }

        public Users GetById(int id)
        {
            using (ISession session = NHibernateHelper.OpenSession())//开启session
            {
                using (ITransaction transaction = session.BeginTransaction())//开启事务
                {
                    Users user = session.Get<Users>(id);
                    transaction.Commit();
                    return user;
                }
            }
        }

        public Users GetByUsername(string username)
        {
            using (ISession session = NHibernateHelper.OpenSession())//开启session
            {
                ICriteria criteria = session.CreateCriteria(typeof(Users));
                criteria.Add(Restrictions.Eq("Username", username));//添加查询条件封装对象
                Users user = criteria.UniqueResult<Users>();
                return user;
                
            }
        }

        public void Remove(Users user)
        {
            using (ISession session = NHibernateHelper.OpenSession())//开启session
            {
                using (ITransaction transaction = session.BeginTransaction())//开启事务
                {
                    session.Delete(user);
                    transaction.Commit();
                }
            }
        }

        public void Updata(Users user)
        {
            using (ISession session = NHibernateHelper.OpenSession())//开启session
            {
                using (ITransaction transaction = session.BeginTransaction())//开启事务
                {
                    session.Update(user);
                    transaction.Commit();
                }
            }
        }

        public bool VerifyUser(string username, string password)
        {
            throw new NotImplementedException();
        }
    }
}

只需要在Program.cs中实例化IUserManger及其中的内容即可(如下以查询数据库中所有数据为例)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using NHibernate_sql.Model;
using NHibernate_sql.Manager;

namespace NHibernate_sql
{
    class Program
    {
     
        static void Main(string[] args)
        {
            
            IUserManager userManager = new UserManager();
            ICollection<Users> users = userManager.GetAllUsers();
            foreach (Users u in users) 
            {
                Console.WriteLine(u.Username + " " + u.Password);
            }
            Console.ReadKey();
        }
        
    }

}