是否可以自动映射一个简单的嵌套对象结构?
这样的事情:
public class Employee : Entity
{
public Employee() {
this.Manages = new List<Employee>();
}
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual bool IsLineManager { get; set; }
public virtual Employee Manager { get; set; }
public virtual IList<Employee> Manages { get; set; }
}
它在运行时导致以下错误:
集合映射中的重复列:SharpKtulu.Core.Employee.Manages列:EmployeeFk
是否可以自动化这种结构,还是我为这种结构覆盖自动映射器?
答案 0 :(得分:2)
这可能是因为您的约定将外键创建为“类名”+“Fk”。因此,您为Manager和Manages属性获得相同的FK列。您可以覆盖约定,以便FK列包含属性名称,因此您将获得EmployeeManagerFk和EmployeeManagesFk。或者也包括左/右侧类(EmployeeManagerInEmployeeFk)等
有关如何覆盖约定的信息,请参阅here。或者,您可以覆盖HasMany / ManyToMany约定以进行不同的设置。阅读FNH文档,查看谷歌,阅读示例代码 - 约定并不总是易于理解和开始工作。
另一个非常有用的选项是export .hbm files。 NHibernate错误消息并不总是用户友好的,但我通常会通过查看导出的.hbm文件找到错误 - 例如您可以在最近“破坏”更改之前/之后比较它们,看看发生了什么。在您的情况下,您可以轻松查看应用重复名称的位置。
答案 1 :(得分:1)