今天是周末,小编来总结一下使用NHibernate插件去访问MySQL数据库以达到增强记忆的目的。众所周知,MySQL官方提供的有与C#进行交互的dll(既Mysql.Data),这种方式是直接进行访问,在实际的项目中这种的方式比较麻烦,而NHibernate是通过ORM(对象关系映射)的方式去访问MySQL,接下来让我们开始探索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#中的映射类(模板)
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”的文件夹下
配置映射文件
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设置为不复制,嵌入资源
所有的环境配置工作完成后就可以进行访问数据库了
下面是访问数据库的操作
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),我们再进一步讨论
以上是我的学习步骤,如有错误,欢迎指正!