У меня есть класс "Лаборатория", который представляет департамент компании, которая использует мою программу. У него есть дочерняя коллекция под названием «Сотрудники», которая должна содержать всех сотрудников, принадлежащих этой лаборатории. Таблица сотрудников содержит строковое поле с именем «Отдел», которое представляет, к какому отделу они принадлежат, а таблица «Лаборатория» содержит строковое поле с именем «Отдел», которое представляет, какой отдел является лабораторией. Сотрудник принадлежит Лаборатории, когда отдел сотрудника совпадает с отделом лаборатории.
Я понимаю, что наличие таблицы сотрудников, содержащей поле LabID, было бы предпочтительным подходом, однако таблица сотрудников не находится под моим контролем, и я не хочу ее изменять. Я бы предпочел сделать это, не добавляя таблицу сопоставления сотрудников в лабораторию, поскольку результат от отдела к отделу такой же.
Это сокращенное отображение, которое я пытаюсь использовать.
<class name="Lab">
<id name="LabID">
<generator class="native" />
</id>
<property name="Department" />
<!--- other properties --->
<set name="Employees" table="Employee_copy" generic="true" inverse="true">
<key column="Department" property-ref="Department" />
<one-to-many class="Employee" />
</set>
</class>
ошибка, которая возвращается
Identifier type mismatch; Found:<System.Int32> Expected:<System.String> Parameter name: identifier
Сгенерированный запрос работает нормально.
SELECT employees0_.Department as Department1_, employees0_.EmployeeID as EmployeeID1_, employees0_.EmployeeID as EmployeeID30_0_, employees0_.CommonName as CommonName30_0_, employees0_.LastName as LastName30_0_, employees0_.NetUserID as NetUserID30_0_, employees0_.CompanyID as CompanyID30_0_, employees0_.Department as Department30_0_ FROM Employee employees0_ WHERE employees0_.Department='IS'
так что я делаю не так?
EDIT:
Обратите внимание, что обратная связь работает нормально.
<many-to-one name="Lab" column="Department" property-ref="Department" class="Lab" />
Связанные свойства для обоих объектов-
Лабораторная работа:
public virtual int LabID { get; set; }
public virtual string Department { get; set; }
public virtual ISet<Employee> Employees { get; set; }
Сотрудник:
public virtual int EmployeeID { get; protected set; }
public virtual string Department { get; protected set; }
public virtual Lab Lab { get; protected set; }