使用MySql数据库,使用NHibernate做映射,前端unity通过本地服务器逻辑功能使用NHibernate对数据库增删改查,之前数据库表之间没有外键,做了简单的增删改查,成功了。卡在了加了外键这里,日志文档提示:表tuser中的关联引用了一个未映射的类:MyGameSever.Model.Tteam
这是MySQL中的数据库建表,tuser是用户表,tteam是队伍表,用户表引用了队伍表中tId作为外键。队伍表和用户表是多对一关系。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyGameSever.Model
{
public class Tuser
{
public virtual int uId { get; set; } // 用户账号
public virtual string uname { get; set; } // 用户昵称
public virtual string upwd { get; set; } // 用户密码
public virtual bool isLogin { get; set; } // 用户已登录
public virtual int uscore { get; set; } // 用户个人积分
public virtual Tteam tteam { get; set; } // 所属队伍id
}
}
// Model文件夹下Tuser.cs的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Iesi.Collections.Generic;
namespace MyGameSever.Model
{
public class Tteam
{
public virtual int tId { get; set; } // 队伍编号
public virtual string tname { get; set; } // 队伍名称
public virtual int tscore { get; set; } // 队伍积分
public virtual ISet<Tuser> tusers { get; set; }
}
}
// Model文件夹下Tteam.cs中代码
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MyGameSever"
namespace="MyGameSever.Model">
<!--行3 模型所在程序集-->
<!--行4 命名空间-->
<!--类型是NHibernate类型 官网有对照表-->
<class name="Tteam" table="tteam"> <!--类名与数据库表名-->
<id name="tId" column="tId" type="Int32"> <!--主键-->
</id>
<property name ="tname" column = "tname" type = "String" ></property >
<property name="tscore" column="tscore" type="Int32" > </property>
<!--一对多关系:Team有一个或多个Users-->
<!--inverse="false":父实体负责维护关联关系,inverse="true":子实体负责维护关联关系-->
<!--set name="tusers" table ="tuser" generic="true" inverse="true"-->
<!--key column="tteam" foreign-key="tId"-->
<!--one-to-many class="Tuser"-->
<set name="tusers" inverse="true">
<key column="tId"/>
<one-to-many class="Tuser"/>
</set>
</class>
</hibernate-mapping>
<!-- Mappings中Tteam.hbm.xml中代码-->
<!-- 主要是一对多部分出错了,我在网上找了两个版本都试过了,一个版本被注释了,一个没有-->
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MyGameSever"
namespace="MyGameSever.Model">
<!--行3 模型所在程序集-->
<!--行4 命名空间-->
<!--类型是NHibernate类型 官网有对照表-->
<class name="Tuser" table="tuser"> <!--类名与数据库表名-->
<id name="uId" column="uId" type="Int32"> <!--主键-->
</id>
<property name ="uname" column = "uname" type = "String" ></property > <!--表中其他-->
<property name ="upwd" column = "upwd" type = "String" ></property >
<property name ="isLogin" column = "isLogin" type = "Boolean" ></property >
<property name="uscore" column="uscore" type="Int32" > </property>
<!--多对一关系:user属于一个team-->
<!--many-to-one name ="tteam" column ="tteam" not-null ="true"
class ="Tteam " foreign-key="tId" -->
<many-to-one name="tteam" column="tId" class="Tteam" />
</class>
</hibernate-mapping>
<!-- Mappings文件夹下Tuser.hbm.xml-->
主要是关于队伍表和用户表的外键这块映射出了错,我是个NHibernate初学者,根据视频教程学了没有外键的表的映射,增删改查,有外键的表是看着帖子来的,出了错,也不知道具体是哪里不对。希望可以得到解决。
这是log具体的报错信息
c# 为什么用Hibernate.....
c# 用Mysql.Entityframework不香吗
直接MySQL.Entityframework直接配齐了。
Java才用Hibernate框架
初学Java你去用Hibernate没有问题,学c#用EF阿。
不要找一些冷门的东西给自己添麻烦添堵......
建议不要做一对多配置,一对多配置性能很差,容易出问题,搞得不好,半个数据库都会关联出来。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y