C#通过NHibernate访问MySQL数据库

时间:2022-09-20 18:27:33

    今天是周末,小编来总结一下使用NHibernate插件去访问MySQL数据库以达到增强记忆的目的。众所周知,MySQL官方提供的有与C#进行交互的dll(既Mysql.Data),这种方式是直接进行访问,在实际的项目中这种的方式比较麻烦,而NHibernate是通过ORM对象关系映射)的方式去访问MySQL,接下来让我们开始探索NHibernate吧!

·NHibernate介绍

NHibernate的官网

NHibernate是一个面向.Net环境的对象到关系数据库的映射工具。

用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中。

通俗来说,就是将实例化的类对象将数据对应存储到关系型数据库的表中。

·需要添加的引用

Mysql.Data

NHibernate

·注意事项

做为访问MySQL的项目的程序集名称不能有中文,因为后面配置访问数据库的文件(针对于数据库)和映射文件的配置(针对于C#中的类)需要使用到这个项目的程序集,这些配置文件包括配置文件的名字都是有一定的格式的,详情请查看文档

配置访问数据库的文件

hibernate.cfg.xml(访问数据库的配置文件的名称必须为hibernate.cfg.xml,否则NHibernate找不到这个配置文件

<?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=192.168.21.128;Port=3306;Database=mygamedb;
      User ID=root;Password=root;SslMode = none;Allow Zero Datetime=True;
    </property><!--这里配置数据库的 IP、端口号,访问的数据库,登录账户,密码等等...-->


    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

并将hibernate.cfg.xml设置为始终复制

C#通过NHibernate访问MySQL数据库

根据数据库中的表的结构去创建C#中的映射类(模板)

users映射类

namespace NHibernateMySQL.Mode
{
    public class users
    {
        //根据 NHibernate 的要求,所以要加 virtual 
        public virtual int userid { get; set; }
        public virtual string username { get; set; }
        public virtual string userpassword { get; set; }
        public virtual DateTime userdatatime { get; set; }
    }
}

创建完映射类之后就要去配置映射文件了,值得注意是所有的映射文件都要放入名称为“Mapping”的文件夹下C#通过NHibernate访问MySQL数据库

配置映射文件

users.hbm.xml(.hbm.xml)

<?xml version="1.0" encoding="utf-8"?>

<!--映射文件-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateMySQL"
                   namespace="NHibernateMySQL.Mode">
  !<!--版本号-->
  <!--程序集名称-->
  <!--映射类所处的命名空间-->

  <!--        映射类名                表名          -->
  <class name="users" table="users">
    <!--配置映射类中的主键-->
    <id name="userid" column="userid" type="Int32">
      <generator class="native"></generator><!--自动增长-->
    </id>
    <property name="username" column="username" type="String"></property><!--用户名-->
    <property name="userpassword" column="userpassword" type="String"></property><!--用户密码-->
    <property name="userdatatime" column="userdatatime" type="DateTime"></property><!--用户创建时间-->
  </class>

</hibernate-mapping>

并将users.hbm.xml设置为不复制,嵌入资源

C#通过NHibernate访问MySQL数据库

所有的环境配置工作完成后就可以进行访问数据库了

下面是访问数据库的操作

using System;
using NHibernate;
using NHibernate.Cfg;
using NHibernateMySQL.Mode;

namespace NHibernateMySQL
{
    internal class Program
    {
        //ISessionFactory是与数据库会话的类
        static ISessionFactory mySessionFactory = null; //默认为空
        static ISession mySession = null;//默认为空
        private static void Main(string[] args)
        {
            //进行配置的解析
            var myConfiguration = new Configuration();//利用Configuration去解析配置
            myConfiguration.Configure(); //解析nhibernate.cfg.xml-(访问数据库的配置文件),这个是配置文件是自动
            myConfiguration.AddAssembly("NHibernateMySQL"); //解析映射文件-users.hbm.xml ,因为映射文件是嵌入资源所以需要指定程序集,
            //TODO:所以的配置文件解析完成后就可以对数据库进行操作了
            try
            {
                //在这里进行与数据库的连接,有可能会发生一些未知的错误。所以,要在这里进行捕捉
                mySessionFactory = myConfiguration.BuildSessionFactory(); //创建一个跟数据库连接的工厂
                mySession = mySessionFactory.OpenSession(); //打开与数据库的会话
                //使用C#中的映射类来对数据库中的表进行操作
                var myUser = new users {userid = 0, username = "呼呼呼", userpassword = "pass2333"}; //初始化一个用户对象
                mySession.Save(myUser); //增加
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if (mySessionFactory != null)
                    mySessionFactory.Close(); //使用完毕后,关闭工厂
                if (mySession != null)
                    mySession.Close(); //使用完毕后,关闭会话通道
            }

            Console.ReadKey();
        }
    }
}

以上就是C#通过NHibernate访问操作MySQL数据库的全部步骤了,同学们有没有get到这个技能呢,如果有什么学习问题可以在下面评论我会第一时间回复,比较着急的同学可以加我QQ(1329443207),我们再进一步讨论

以上是我的学习步骤,如有错误,欢迎指正!