关于NHibernate与Unity访问远程MySQL数据库的记录
2019-05-15 17:59
281 查看
NHibernate框架的搭建
1.在VS2017中创建项目,项目的输出类型是类库,并且在Nuget程序包中引入NHibernate。
2.简单的编写关于NHibernate的配置文件,属性的输出目录改为始终复制,文件名一定为“hibernate.cfg.xml”
<?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="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property> <property name="connection.connection_string">Server=;Database=;User ID=;Password=;</property> <property name ="dialect">NHibernate.Dialect.MySQL5Dialect</property> <property name="show_sql">true</property> </session-factory> </hibernate-configuration>
其中在connection_connection_string中是连接数据库的语句,Server为远程服务器IP地址,Database为服务器上MySQL数据库库名,User ID为用户名,Password为密码。远程服务器我是去租用阿里云服务器ESC玩一玩,在服务器中安装了MySQL并且创建了数据库和表以及账号密码权限(连接语句我已经删除了需要填写的内容)。
3.创建Model文件夹,在下面创建一个关于对应数据库表的类,类属性记得加上关键字virtual。
4…简单的编写关于NHibernate的映射文件,属性中的生成操作改为嵌入的资源。我就放出关于管理员类的映射文件。创建文件夹Mapping,把映射文件放在里面,并且文件名为“xxx.hbm.xml”,xxx为类名。
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MySQLTool" namespace="MySQLTool.Model"> <class name="Admin" table="admin" > <id name="Username" column="username" type="String"></id> <property name="Password" column="password" type="String"></property> </class> </hibernate-mapping>
所有关于配置文件以及映射文件属性的介绍都可以通过百度查找。
5.编写一个NHibernateHelper类用于访问数据库
public class NhibernateHelper { public static string filePath = ""; private static ISessionFactory sessionFactory; private static ISessionFactory SessionFactory{ get { if(sessionFactory == null) { var configuration = new Configuration(); configuration.Configure(filePath + "hibernate.cfg.xml"); configuration.AddAssembly("MySQLTool"); sessionFactory = configuration.BuildSessionFactory(); } return sessionFactory; } } public static ISession OpenSession() { return SessionFactory.OpenSession(); } }
注意:本来configuration.Configure()是默认应用程序路径的,但是为了在unity引擎上使用,访问到对应的文件路径,定义了一个属性filePath用于后期unity赋值读取对应文件。
6.编写一个与数据库的交互类,定义一个接口
interface IManager { bool Check(string username, string password); }
7.继承接口,实现方法
public class AdminManager :IManager{ private static AdminManager _Instance; public static AdminManager Instance { get { if (_Instance == null) { _Instance = new AdminManager(); } return _Instance; } } /// <summary> /// 验证管理员用户密码,存在为True,不存在为False /// </summary> /// <param name="username">用户名</param> /// <param name="password">密码</param> public bool Check(string username,string password) { using (ISession session = NhibernateHelper.OpenSession()) { Admin admin = session.CreateCriteria<Admin>() .Add(Restrictions.Eq("Username", username)) .Add(Restrictions.Eq("Password", password)) .UniqueResult<Admin>(); return admin != null ? true : false; } } }
8.生成项目,创建一个unity项目,在项目中创建一个Plugin文件夹和一个StreamingAssets文件夹,在刚才项目的Debug中把所有dll复制到unity项目的Plugin文件夹,把hibernate.cfg.xml文件复制到StreamingAssets文件夹。
9.在unity项目中随便创建个类进行测试,至于结果显示就随便弄个Text输出结果就行。
public class Test : MonoBehaviour { void Start() { NhibernateHelper.filePath = Application.streamingAssetsPath + "/"; AdminManager.Instance.Check("username", "password"); } }
在编辑模式下是能够成功执行的,但是,当我打包成exe运行时,发现无法输出结果,在调试下发现日志报错是PlatformNotSupportedException。后来发现只需要在BuildSetting ——>PlayerSettings——>OtherSettings中Api Compatibility Level设置为.NET 4.x就行了,貌似是因为复制过来的dll文件显示Assembly Info Targets .NET 4.x,无法在.NET Standrard 2.0运行。
相关文章推荐
- 关于远程访问mysql数据库的问题
- 关于mysql数据库远程访问功能
- 关于Kali添加远程访问mysql数据库
- 关于Linux允许远程访问mysql数据库
- 关于远程无法访问服务器的webServices
- MySQL数据库如何实现远程连接访问(上)
- 无法远程访问linux下的mysql数据库
- 关于sql 2005 express 远程访问和sa密码的问题(转帖)
- MySQL数据库远程访问权限打开
- 命令行访问远程mysql数据库
- 关于远程访问tomcat问题的总结
- mysql数据库配置远程访问
- MySQL数据库远程访问权限如何打开(两种方法)
- 打开MySQL数据库远程访问的权限
- mysql数据库远程访问设置方法
- 记录一些关于android与unity之间交互的文章
- MySQL数据库修改用户权限(远程访问权限、操作权限)
- linux下mysql数据库无法远程访问
- MySQL Connector C++库在VS2010平台连接访问远程MySQL数据库
- MySQL数据库怎么实现远程连接访问