PhotonServer游戏服务器学习利用NHibernate和MySQL进行交互(下)

为了进行更好的交互,我重新创建了一个新的项目和新的数据库表格

一、创建一个操作数据的管理类,用于操作映射类的数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using BR利用NHibernate和MySQL进行交互.Model;

namespace BR利用NHibernate和MySQL进行交互
{
    /// <summary>
    /// 创建一个操作数据的管理类,用于操作映射类的数据
    /// </summary>
    internal class usersControl
    {
        private static ISessionFactory _sessionFactory;
        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var configration = new Configuration();
                    configration.Configure("hibernate.cfg.xml");//解析nhibernate.cfg.xml
                    configration.AddAssembly("BR利用NHibernate和MySQL进行交互");//解析 映射文件 firstine.hbm.xml...
                    _sessionFactory = configration.BuildSessionFactory();
                    //Console.WriteLine("解析成功");
                }
                return _sessionFactory;
            }
        }
        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
}

二、创建一个接口

using System.Text;
using System.Threading.Tasks;
using BR利用NHibernate和MySQL进行交互.Model;

namespace BR利用NHibernate和MySQL进行交互.Manager
{
    interface IUserManager
    {
        void Add(users user);
        void Update(users user);
        void Remove(users user);
        users GetById(int id);
        users GetByUsername(string username);
        ICollection<users> GetAllUsers();
    }
}

三、实现接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using BR利用NHibernate和MySQL进行交互.Model;

namespace BR利用NHibernate和MySQL进行交互.Manager
{
    internal class UserManager : IUserManager
    {
        public void Add(users user)
        {
            //ISession session = firstoneControl.OpenSession();
            //session.Save(firstone);
            //session.Close();
            using (ISession session = usersControl.OpenSession())//using()里面得到我们需要释放的资源,using{}里面是我们需要进行的操作,等using{}里面的using释放才会释放。
            {
                using (ITransaction transaction = session.BeginTransaction())//添加一个事务,同样也是需要释放的资源,using{}里面操作完了才会被释放
                {
                    session.Save(user);
                    transaction.Commit();
                }
            }
        }

        public void Remove(users user)
        {
            using (ISession session = usersControl.OpenSession())//using()里面得到我们需要释放的资源,using{}里面是我们需要进行的操作,等using{}里面的using释放才会释放。
            {
                using (ITransaction transaction = session.BeginTransaction())//添加一个事务,同样也是需要释放的资源,using{}里面操作完了才会被释放
                {
                    session.Delete(user);
                    transaction.Commit();
                }
            }
        }

        public void Update(users user)
        {
            using (ISession session = usersControl.OpenSession())//using()里面得到我们需要释放的资源,using{}里面是我们需要进行的操作,等using{}里面的using释放才会释放。
            {
                using (ITransaction transaction = session.BeginTransaction())//添加一个事务,同样也是需要释放的资源,using{}里面操作完了才会被释放
                {
                    session.Update(user);
                    transaction.Commit();
                }
            }
        }

        ICollection<users> IUserManager.GetAllUsers()
        {
            throw new NotImplementedException();
        }

        public Model.users GetById(int id)
        {
            using (ISession session = usersControl.OpenSession())//using()里面得到我们需要释放的资源,using{}里面是我们需要进行的操作,等using{}里面的using释放才会释放。
            {
                using (ITransaction transaction = session.BeginTransaction())//添加一个事务,同样也是需要释放的资源,using{}里面操作完了才会被释放
                {
                    Model.users user = session.Get<Model.users>(id);
                    transaction.Commit();
                    return user;
                }
            }
        }

        users IUserManager.GetByUsername(string username)
        {
            throw new NotImplementedException();
        }
    }
}

四、在Program.cs中进行增删改查操作

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using BR利用NHibernate和MySQL进行交互.Model;
using BR利用NHibernate和MySQL进行交互.Manager;

namespace BR利用NHibernate和MySQL进行交互
{
    internal class Program
    {
        /// <summary>
        /// 使用nhibernate对数据库进行交互的步骤
        /// 1、引入工具API(dll文件),使用xml进行配置
        /// 2、进行映射,把数据库里面表格和类进行关联,然后使用实例化对象的方式操作数据库
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            IUserManager userManager = new UserManager();//创建IUserMananger的对象
            Console.WriteLine("连接成功");
            添加
            //users users = new users() { Name = "小憩", Age = 20, Time = DateTime.Now };
            //userManager.Add(users);

            修改
            //users users = new users() { ID = 1, Name = "小伊", Age = 17, Time = DateTime.Now };
            //userManager.Update(users);

            删除
            //users users = new users() { ID = 9 };
            //userManager.Remove(users);

            //查询
            //users users = userManager.GetById(3);
            //Console.WriteLine(users.Name);
            //Console.WriteLine(users.Age);
            Console.ReadKey();
        }

    }
}

五、问题

我在进行查询时发现报错,呈现乱码。如图:

 分析原因:

应用程序中的服务器错误。

可能是MySql.Data版本过于旧,同时注意版本也不能用最新的(安装不了)

我当时安装的是8.0.30

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值