汤伯远好辣 2021-05-04 19:26 采纳率: 0%
浏览 30

使用NHibernate映射数据库外键?

使用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具体的报错信息

  • 写回答

4条回答 默认 最新

  • CSDN专家-Time 2021-05-04 19:30
    关注

    c# 为什么用Hibernate.....

    c# 用Mysql.Entityframework不香吗

    直接MySQL.Entityframework直接配齐了。

    Java才用Hibernate框架

    初学Java你去用Hibernate没有问题,学c#用EF阿。

    不要找一些冷门的东西给自己添麻烦添堵......

    评论

报告相同问题?

悬赏问题

  • ¥15 请教下, VS QT 环境下, QTOPCUA 的源文件报错,这种情况咋查呢 ?
  • ¥20 UNITY webgl关于文档的上传和下载问题
  • ¥15 安霸cv22 + rtl8211f 千兆,udp传输丢包
  • ¥15 关于区块链和边缘环境搭建的相关问题
  • ¥15 windows远程桌面断卡重连软件卡顿问题
  • ¥30 Unity 实现扫描效果
  • ¥15 HbuilderX检测不到安卓模拟器
  • ¥15 这个main已经在filename.obj中定义是什么错 C语言
  • ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
  • ¥15 使用elementor设计样式