2014-10-20 7 views
0

Сопоставление композитных клавиш в нижеприведенном сценарии не работает.Ошибка сопоставления несуществующего Nhibernate Composite Key

Таблицы базы данных приведены ниже.

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) 

Сущности являются такими, как показано ниже. class Employee { public virtual string ID {get; задавать; } общедоступная виртуальная строка Имя {get; задавать; } public virtual Role EmpRole {get; задавать; }}

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.

Большое спасибо за любую помощь.

ответ

1

Нашли решение, а точнее сказать, нашли ошибку, которую я делаю. В моем коде реализованы методы Equal и GetHashCode. Ниже исправленное entiity,

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(); 
    } 
} 

regards..Dharmendra

Смежные вопросы