Nhibernate 查询无主键表或视图时,查询结果不正确的问题

来源:互联网 发布:我的世界pe一键挖矿js 编辑:程序博客网 时间:2024/06/06 00:09

问题:Nhinbernate用生成的SQL语句,可以在toad里查询出正确的结果,但在程序里查询出结果不正确,虽然查询出来的数据行数正确,但具体某些列的值不正确

原因:查询的视图或表没有权限

解决办法:可以使用联合主键


代码大致如下

实体类文件  V_Sgs_ExceptionList.cs

using System;
using System.Collections;


namespace Data.Hbm
{
/// <summary>
/// 车流水
/// </summary>
    public class V_Sgs_ExceptionList
{
        /// <summary>
        /// 主键
        /// </summary>
        public  string TruckKey
        {
            get
            {
                if (_Exceptionpk != null)
                    return _Exceptionpk.TruckKey;
                return "";
            } 
        }


        public override string CntrNO
        {
            get
            {
                if (_Exceptionpk != null)
                    return _Exceptionpk.CntrNo;


                return "";
            }
        }


        public virtual string ErrorId
        {
            get
            {
                if (_Exceptionpk != null)
                    return _Exceptionpk.ErrorId;
                return "";
            }
            //set { errorId = value; }
        }


        private string _ExceptionDes;
        public string ExceptionDes
        {
            get { return _ExceptionDes; }
            set { _ExceptionDes = value; }
        }

        private ExceptionPk _Exceptionpk;
        public ExceptionPk Exceptionpk
        {
            get { return _Exceptionpk; }
            set { _Exceptionpk = value; }
        }
}


    public class ExceptionPk
    {
        private string _truckKey;
        private string _CntrNo;
        private string errorId;

        public virtual string TruckKey
        {
            get { return _truckKey; }
            set { _truckKey = value; }
        }


        public virtual string CntrNo
        {
            get { return _CntrNo; }
            set { _CntrNo = value; }
        }


        public virtual string ErrorId
        {
            get { return errorId; }
            set { errorId = value; }
        }
 
        /// <summary>
        /// 判断两个对象是否相同,这个方法需要重写
        /// </summary>
        /// <param name="obj">进行比较的对象</param>
        /// <returns>真true或假false</returns>
        public override bool Equals(object obj)
        {
            if (obj is ExceptionPk)
            {
                ExceptionPk pk = obj as ExceptionPk;
                if (this.CntrNo == pk.CntrNo
                    && this.TruckKey == pk.TruckKey
                    && this.ErrorId == pk.ErrorId)
                {
                    return true;
                }
            }
            return false;
        }


        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
    }
}


映射文件:V_Sgs_ExceptionList.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="Data.Hbm.V_Sgs_ExceptionList, SGS.Data" table="V_Sgs_ExceptionList">
    <composite-id name="Exceptionpk" class="Data.Hbm.ExceptionPk, SGS.Data">
      <key-property name="TruckKey" column="TruckKey"  />
      <key-property name="CntrNo" column="CntrNo"   />
      <key-property name="ErrorId" column="EXPID"   />

    </composite-id>
    <property name="TruckNumber" type="String(30)" column="TRUCKNUMBER"/>
    <!--<property name="TruckKey" type="String(30)" column="TRUCKKEY"/>-->
    <!--<property name="CntrNO" type="String(15)" column="CNTRNO"/>-->
    <!--<property name="ErrorId"  column="EXPID"/>-->
  </class>
</hibernate-mapping>


注意:复合主键里已定义的列,不能重复定义,如上述映射文件的TruckKey不能重复


0 0
原创粉丝点击