Это, вероятно, потому что ваши соглашения создают внешние ключи как "имя класса" + "Fk". Таким образом, вы получаете один и тот же столбец FK для свойств Manager и Manages. Вы можете переопределить соглашения так, чтобы столбец FK включал имя свойства, и, таким образом, вы получите EmployeeManagerFk и EmployeeManagesFk. Или включите оба класса левой / правой стороны (EmployeeManagerInEmployeeFk) и т. Д.
См. здесь о том, как переопределить соглашения. Или вы можете переопределить соглашения HasMany / ManyToMany, чтобы иметь различные настройки. Прочитайте документы FNH, посмотрите в Google, прочитайте пример кода - соглашения не всегда легко понять и приступить к работе.
Еще одна очень полезная опция - экспорт .hbm файлов . Сообщения об ошибках NHibernate не всегда удобны для пользователя, но я обычно нахожу ошибки, просматривая экспортированные файлы .hbm - например, Вы можете сравнить их до / после вашего недавнего "критического изменения", чтобы увидеть, что происходит. В вашем случае вы легко увидите, где применяются дублирующие имена.