Свободные иерархические данные NHibernate

Всем привет. Быстрый вопрос о синтаксисе Fluent. Я думал, что у меня это вниз, но я получаю странный сбой. По сути, у меня есть иерархическая структура, которую я пытаюсь сохранить, и все это, кажется, работает, за исключением случаев, когда я провожу реальный интеграционный тест с базой данных.

У меня есть объект Node, у которого есть свойство Parent, которое является другим узлом, и поле _children, поддерживающее свойство Children, доступное только для чтения, которое также является коллекцией узлов.

Свойства обрабатывают взаимосвязь, а объекты в памяти прекрасно проверяются. Однако, когда я извлекаю их из репозитория (база данных SQLite в памяти в моих тестах), по какой-то причине любые дочерние узлы включают себя. Любые идеи?

Мои сопоставления в основном выполняются с помощью AutoMap, но я переопределил следующее:

mapping.References(x => x.Parent);
mapping.HasMany(x => x.Children).Inverse().Access.LowerCaseField(Prefix.Underscore);

Я также пробовал без вызова Inverse().


person Paul    schedule 10.09.2009    source источник
comment
хм. преобразовал класс Node для использования общедоступного свойства w/get/set вместо частного поля, и коллекция была получена правильно. Я действительно предпочел бы не делать это таким образом, хотя.   -  person Paul    schedule 10.09.2009
comment
дополнительная информация; Я проверяю БД, и все сохраняется правильно, проблема в том, что данные вытягиваются обратно в объекты.   -  person Paul    schedule 11.09.2009


Ответы (1)


Понятно. Проблема заключалась в том, что мне нужно было указать дочерней коллекции, какое поле Id нужно подключить для внешнего ключа.

Я изменил это сопоставление, чтобы оно выглядело так:

mapping.HasMany(m => m.Children)
  .Inverse()
  .KeyColumn("ParentId")
  .Access.CamelCaseField(Prefix.Underscore)
  .Cascade.All()
person Paul    schedule 10.09.2009
comment
Я уже сделал это с помощью Castle Framework, но забыл об этом и боролся с той же проблемой, что и вы. Когда я прочитал ваш ответ, у меня был момент А-ха, спасибо :) - person Nelson Miranda; 22.03.2011