#nhibernate #fluent-nhibernate #fluent-nhibernate-mapping
#nhibernate #свободный-nhibernate #fluent-nhibernate-mapping
Вопрос:
Я пытаюсь отобразить простую структуру данных в nhibernate
Таблицы:
Employees
employeeID int
username varchar(30)
departmentID int
Departments
departmentID int
deptName varchar(50)
Отображение моего отдела выглядит следующим образом:
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");
}
}
… и отображение сотрудника
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");
}
}
Я пытаюсь перебрать отделы и вывести всех сотрудников из каждого отдела:
foreach (var i in _directoryData.DepartmentCollection)
{
foreach (var e in i.Employees)
{
Debug.WriteLine(i.DepartmentName " " e.UserName);
}
}
что выдает мне ошибку с указанием « Invalid column name 'Department_id'.
«… и в сгенерированном запросе он также использует department_id. Когда я просто перебираю отделы и вывожу название отдела, все работает нормально.
Есть идеи, чего мне не хватает, чтобы получить правильное имя столбца для DepartmentID? Вот мои объекты модели на всякий случай:
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; }
}
Комментарии:
1. @David — да, я это сделал. Мое отображение, похоже, совпадает с отображением wiki на сайте fluentnhibernates.
Ответ №1:
Вы можете либо: создать соглашение Fluent NHibernate, чтобы HasMany
«внешний ключ» создавался как <'Name'>ID
.
Или измените отображение отдела:
HasMany(m => m.Employees).KeyColumns.Add("DepartmentID")
Комментарии:
1. Спасибо, я, должно быть, пропустил эту часть во fluents wiki.
Ответ №2:
Вам нужно указать столбец ключа.
HasMany(m => m.Employees).KeyColumn("DepartmentId");
Ответ №3:
Вам необходимо использовать KeyColumn
метод в объявлении hasMany, как описано в документации