8

que estoy tratando de asignar una estructura de datos simple en NHibernateFluido NHibernate hasMany clave externa Mapeo Problema

Tablas:

Employees 
employeeID int 
username varchar(30) 
departmentID int 

Departments 
departmentID int 
deptName varchar(50) 

Mi mapeo departamento es así:

public class DepartmentMap: ClassMap<Department> 
{ 
    public DepartmentMap() 
    { 
     Id(m => m.DepartmentID).Column("departmentID"); 
     Map(m => m.DepartmentName).Column("deptName").Length(50); 

     HasMany(m => m.Employees); 

     Table("Departments"); 
    } 
} 

... y el mapeo de empleados

public class EmployeeMap : ClassMap<Employee> 
{ 
    public EmployeeMap() 
    { 
     Id(x => x.EmployeeID, "employeeID"); 
     Map(x => x.UserName, "username").Length(30); 

     References<Department>(x => x.Department, "departmentID"); 

     Table("Employees"); 
    } 
} 

estoy tratando de bucle a través de los departamentos y tirar de todos los empleados de cada departamento:

foreach (var i in _directoryData.DepartmentCollection) 
{ 
    foreach (var e in i.Employees) 
    { 
     Debug.WriteLine(i.DepartmentName + " " + e.UserName); 
    } 
} 

que me da un error que indica "Invalid column name 'Department_id'." ... y en la consulta generada se utiliza department_id también. Cuando simplemente recorro los departamentos y genero el nombre del departamento, funciona bien.

¿Alguna idea de lo que me falta para obtener el nombre de columna correcto para departmentID? Aquí están mis objetos del modelo por si acaso:

public class Department 
{ 
    public virtual int DepartmentID { get; set; } 
    public virtual string DepartmentName { get; set; } 

    public virtual ICollection<Employee> Employees { get; set; } 
} 

public class Employee : PersistentEntity 
{ 
    public virtual int EmployeeID { get; set; } 
    public virtual string UserName { get; set; } 

    public virtual Department Department { get; set; } 
} 
+0

@ David - Sí, lo hice. Mi asignación parece ser la misma que la wiki de asignación en el sitio fluentnhibernates. –

Respuesta

14

Usted puede: crear un Fluido NHibernate convención para que la "clave externa" HasMany se crea como <'Name'>ID.

o cambiar el mapeo Departamento:

HasMany(m => m.Employees).KeyColumns.Add("DepartmentID") 
+0

Gracias, debo haber pasado por alto esa parte en la wiki de fluentes. –

10

Es necesario especificar la columna de clave.

HasMany(m => m.Employees).KeyColumn("DepartmentId"); 
1

Es necesario utilizar el método KeyColumn en la declaración hasMany, como se explica en el documentation

Cuestiones relacionadas