我有一个班级“实验室”代表一个使用我的程序的公司的部门。它有一个名为“Employees”的子集合,旨在包含属于该Lab的所有Employees。 employee表包含一个名为“Department”的字符串字段,表示它们属于哪个部门,Lab表包含一个名为“Department”的字符串字段,表示Lab所属的部门。当员工的部门与实验室的部门匹配时,员工属于实验室。
我意识到让employee表包含LabID字段将是更好的方法,但是employee表不在我的控制之下,我不想修改它。我更愿意这样做而不添加员工到实验室的映射表,因为部门与部门提供相同的结果。
这是我正在尝试使用的删节映射。
<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'
所以我做错了什么?
编辑:
另请注意,反向关联正常。
<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; }
答案 0 :(得分:0)
由于Employee表是不可变的,我最终创建了一个视图,该视图获得了基于部门的Lab ID,并直接链接到该表而不是employee表。
咩。的工作原理。