Могу ли я автоматизировать древовидную иерархию с помощью Fluent NHibernate? - PullRequest
3 голосов
/ 10 марта 2010

Можно ли автоматически отобразить простую структуру вложенных объектов?

Примерно так:

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 ]

2 голосов
/ 14 марта 2010

Это, вероятно, потому что ваши соглашения создают внешние ключи как "имя класса" + "Fk". Таким образом, вы получаете один и тот же столбец FK для свойств Manager и Manages. Вы можете переопределить соглашения так, чтобы столбец FK включал имя свойства, и, таким образом, вы получите EmployeeManagerFk и EmployeeManagesFk. Или включите оба класса левой / правой стороны (EmployeeManagerInEmployeeFk) и т. Д.

См. здесь о том, как переопределить соглашения. Или вы можете переопределить соглашения HasMany / ManyToMany, чтобы иметь различные настройки. Прочитайте документы FNH, посмотрите в Google, прочитайте пример кода - соглашения не всегда легко понять и приступить к работе.

Еще одна очень полезная опция - экспорт .hbm файлов . Сообщения об ошибках NHibernate не всегда удобны для пользователя, но я обычно нахожу ошибки, просматривая экспортированные файлы .hbm - например, Вы можете сравнить их до / после вашего недавнего "критического изменения", чтобы увидеть, что происходит. В вашем случае вы легко увидите, где применяются дублирующие имена.

1 голос
/ 04 мая 2010
...