为了进行更好的交互,我重新创建了一个新的项目和新的数据库表格
一、创建一个操作数据的管理类,用于操作映射类的数据
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