3

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

像这样的东西:

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

是否可以自动映射这种结构,或者我是否已经覆盖了这种结构的自动映射器?

4

2 回答 2

2

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

请参阅此处了解如何覆盖约定。或者您可以覆盖 HasMany/ManyToMany 约定以进行不同的设置。阅读 FNH 文档,在 google 中查找,阅读示例代码 - 约定并不总是易于理解和开始工作。

另一个非常有用的选项是导出 .hbm 文件。NHibernate 错误消息并不总是对用户友好,但我通常通过查看导出的 .hbm 文件来发现错误 - 例如,您可以在最近的“重大”更改之前/之后比较它们以查看发生了什么。在您的情况下,您将很容易看到重复名称应用在哪里。

于 2010-03-14T15:09:27.453 回答
1

这刚刚更新:

http://fluentnhibernate.lighthouseapp.com/projects/33236/tickets/115-self-referencing-relationships

于 2010-05-04T19:56:34.147 回答