2010-03-10 91 views
3

是否可以自动映射一个简单的嵌套对象结构?我可以使用Fluent NHibernate自动映射树形结构吗?

事情是这样的:

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

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

请参阅here了解如何重写约定。或者,您可以重写HasMany/ManyToMany约定以进行不同的设置。阅读FNH文档,看看谷歌,阅读示例代码 - 约定并不总是容易理解和工作。

另外非常有用的选项是export .hbm files。 NHibernate错误消息并不总是用户友好的,但我通常通过查看导出的.hbm文件来发现错误 - 例如你可以在你最近的“突破”变化之前/之后比较它们,看看发生了什么。在你的情况下,你会很容易地看到应用重复名称的位置。

相关问题