今天是周末,小编来总结一下使用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),我们再进一步讨论
以上是我的学习步骤,如有错误,欢迎指正!