您的位置:首页 > 移动开发 > Unity3D

关于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运行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: