我可以使用Fluent NHibernate自动化树层次结构吗?

时间:2010-03-10 20:51:37

标签: fluent-nhibernate s#arp-architecture automapping

是否可以自动映射一个简单的嵌套对象结构?

这样的事情:

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

是否可以自动化这种结构,还是我为这种结构覆盖自动映射器?

2 个答案:

答案 0 :(得分:2)

这可能是因为您的约定将外键创建为“类名”+“Fk”。因此,您为Manager和Manages属性获得相同的FK列。您可以覆盖约定,以便FK列包含属性名称,因此您将获得EmployeeManagerFk和EmployeeManagesFk。或者也包括左/右侧类(EmployeeManagerInEmployeeFk)等

有关如何覆盖约定的信息,请参阅here。或者,您可以覆盖HasMany / ManyToMany约定以进行不同的设置。阅读FNH文档,查看谷歌,阅读示例代码 - 约定并不总是易于理解和开始工作。

另一个非常有用的选项是export .hbm files。 NHibernate错误消息并不总是用户友好的,但我通常会通过查看导出的.hbm文件找到错误 - 例如您可以在最近“破坏”更改之前/之后比较它们,看看发生了什么。在您的情况下,您可以轻松查看应用重复名称的位置。

答案 1 :(得分:1)