Обновление
Ну, как мне сказали Стюарт Чарльз и Джеймс Грегори, моя модель была достаточно странной для начала. Очевидно, что двусторонние ссылки между классами при различении различных видов отношений не сделаны, и, по-видимому, по очень веской причине.
Я разрушил модель, изменил ее на другую, используя HasManyToMany между пользователями и Fiches, а затем добавил несколько кодированных проверок, чтобы убедиться, что мои пользователи не могут быть связаны более чем с одним Fiche.
Так что я думаю, что ответом на этот вид проблемы является своего рода предупреждение: «Не делай этого»;)
Спасибо вам обоим, что нашли время ответить!
Привет всем
Путь к правильному использованию Fluent Nhibernate труден, и, поскольку я начинаю чувствовать себя действительно ошеломленным, я подумал, что не помешает обратиться за помощью. Вот в чем дело.
Виновные
У меня есть следующие два класса, Fiche и User. Фиш должен иметь владельца пользователя и может иметь много последователей. С другой стороны, Пользователь может при необходимости быть привязан к одному и только одному Фишу. (Базовый класс EntityUpdateTrace содержит идентификатор guid и время создания / изменения для использования в PreSave / PreUpdate)
Public Class Fiche
Inherits EntityUpdateTrace(Of Fiche)
Private m_Owner As User
Public Property Owner() As User
' snip
Private m_Followers As IList(Of User)
Public Property Followers() As IList(Of User)
' snip
End Class
Public Class User
Inherits EntityUpdateTrace(Of User)
Private m_Fiche As Fiche
Public Property Fiche() As Fiche
' snip
End Class
У меня тогда есть следующее отображение
Public Class FicheMapping
Inherits ClassMap(Of Fiche)
Public Sub New()
[Not].LazyLoad()
Id(Function(f As Fiche) f.Id).GeneratedBy.GuidComb()
References(Of User)(Function(f As Fiche) f.Owner).Not.Nullable()
HasMany(Of User)(Function(f As Fiche) f.Followers).Inverse()
End Sub
End Class
Public Class UserMapping
Inherits ClassMap(Of User)
Public Sub New()
[Not].LazyLoad()
Id(Function(a As User) a.Id).GeneratedBy.GuidComb()
References(Of Fiche)(Function(a As User) a.Fiche).Nullable()
End Sub
End Class
Вопрос
Какого черта я делаю не так? :)
Я не могу заставить эту модель работать, хотя она выглядит обманчиво простой.
Fiche загружает всех пользователей, связанных с ним; Звучит логично, и я думаю, мне следует различать определенный параметр, но, поскольку это будет что-то, полностью связанное с базой данных, мне не очень нравится идея (я пытаюсь поддерживать чистоту в чистоте классов в качестве упражнения в области гигиены домена). Так что, если Fiche veryImportantFiche создается Алисой, а затем Бобом, при перезагрузке подписчиков я нахожу Алису и Боба. Есть ли способ различать два типа пользователей?
Я хотел бы использовать список в базе данных, чтобы следить за порядком подписчиков, но как только я изменю отображение на
HasMany (пользователя) (функция (f как фишка) f.Followers) .AsList (). Inverse ()
появляется следующая ошибка:
столбец нулевого индекса для коллекции:
Последователи
Количество информации об этой ошибке на самом деле не является подавляющим, что наводит меня на мысль, что я неправильно отношусь к этой модели, что возвращает меня к первому вопросу ... Что, черт возьми, я делаю неправильно?
Спасибо всем за чтение и за понимание этого!