【问题标题】:Fluent Nhibernate Composite Key mapping errorFluent Nhibernate Composite Key 映射错误
【发布时间】:2014-12-15 13:30:39
【问题描述】:

复合键映射在以下情况下不起作用。

数据库表如下。

   Employee { Emp_ID, Name, Role_ID } (Role_ID is foreign key from Role table);
   Leave    { Leave_ID, Leave_Date, Leave_Comment}; 
   Employee_Leave  { Emp_ID, Leave_ID, Approval }; (EMP_ID and Leave_ID are composite key from Employee and Leave table respectively)

实体类如下。 员工类 { 公共虚拟字符串 ID { 获取;放; } 公共虚拟字符串名称 { 获取;放; } 公共虚拟角色 EmpRole { 获取;放; } }

public class Leave
{
    virtual public Int16 LeaveID { get; set; }
    virtual public String LeaveDate { get; set; }
    virtual public String Comment { get; set; }
}

 public class EmployeeLeaveApproval
 {
    public virtual string EMP_ID { get; set; }
    public virtual int Leave_ID { get; set; }
    public virtual string Approval { get; set; }
 }

映射类如下。

 public class EmployeeMap : ClassMap<Employee>
 {
     public EmployeeMap()
     {
         Table("Employee");
         Id(x => x.ID, "ID");
         Map(x => x.Name, "NAME");
         References(x => x.EMPRole, "ROLE_ID").Not.LazyLoad();
      }
  }

   public class LeaveMap : ClassMap<Leave>
   {
       public LeaveMap()
       {
           Table("Leave");
           Id(x => x.LeaveID, "LEAVE_ID");
           Map(x => x.LeaveDate, "LEAVE_DATE");
           Map(x => x.Comment, "LEAVE_COMMENT");
       }
    }

下面的类映射工作正常。

    public class EmployeeLeaveApprovalMap : ClassMap<EmployeeLeaveApproval>
    {
       public EmployeeLeaveApprovalMap()
       {
           Table("Employee_Leave");
           Id(x => x.EMP_ID, "EMP_ID");
           Map(x => x.Leave_ID, "LEAVE_ID");
           Map(x => x.Approval, "Approval");
        }
     }

下面的类映射不起作用。

    public class EmployeeLeaveApprovalMap : ClassMap<EmployeeLeaveApproval>
    {
       public EmployeeLeaveApprovalMap()
       {
           Table("Employee_Leave");
           CompositeId()
             .KeyProperty(x => x.EMP_ID, "EMP_ID")
             .KeyProperty(x => x.Leave_ID, "LEAVE_ID");
           Map(x => x.Approval, "Approval");
        }
     }

收到错误“未通过数据库方法配置数据库。”同时调用方法 BuildSessionFactory。

非常感谢您的任何帮助。

【问题讨论】:

    标签: fluent-nhibernate


    【解决方案1】:

    找到解决方案而不是说找到了我正在做的错误。 Equal 和 GetHashCode 方法仍在我的代码中实现。 以下是更正后的实体,

     public class EmployeeLeaveApproval : Object
    {
        public virtual string EMP_ID { get; set; }
        public virtual int Leave_ID { get; set; }
        public virtual string Approval { get; set; }
    
        public EmployeeLeaveApproval() {}
    
        public override bool Equals(object obj)
        {
            if (obj == null)
                return false;
    
            EmployeeLeaveApproval EL = (EmployeeLeaveApproval)obj;
            if (EL == null)
                return false;
    
            if (EMP_ID == EL.EMP_ID && Leave_ID == EL.Leave_ID)
                return true;
    
            return false;
        }
    
        public override int GetHashCode()
        {
            return (EMP_ID + "|" + Leave_ID).GetHashCode();
        }
    }
    

    问候..Dharmendra

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 2012-04-03
      • 2012-10-19
      • 2013-01-07
      相关资源
      最近更新 更多