8

Je suis en train de tracer une structure de données simple dans NHibernateFluent NHibernate hasMany Clé étrangère Cartographie Problème

Tables:

Employees 
employeeID int 
username varchar(30) 
departmentID int 

Departments 
departmentID int 
deptName varchar(50) 

Ma cartographie du département est comme ceci:

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

... et le mappage des employés

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

Je suis en train de boucler à travers les départements et tirer tous les employés de chaque département:

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

qui me donne une erreur indiquant « Invalid column name 'Department_id'. » ... et dans la requête générée qu'elle utilise department_id ainsi. Lorsque je fais une boucle dans les ministères et que je publie le nom du ministère, cela fonctionne très bien.

Une idée de ce qui me manque pour obtenir le nom de colonne correct pour departmentID? Voici mes objets modèle juste au cas où:

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 - oui, je l'ai fait. Ma cartographie semble être la même que le wiki de cartographie sur le site fluentnhibernates. –

Répondre

14

Vous pouvez soit: créer une convention Fluent NHibernate afin que la HasMany « clé étrangère » est créé comme <'Name'>ID.

Ou changer la cartographie Département:

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

Merci, je dois avoir négligé cette partie dans fluents wiki. –

10

Vous devez spécifier la colonne clé.

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

Vous devez utiliser la méthode KeyColumn sur la déclaration hasMany, comme cela est expliqué dans le documentation

Questions connexes