Как я могу сопоставить список строк с моей сущностью, используя NHibernate?

StackOverflow https://stackoverflow.com/questions/49220

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть две таблицы в моей базе данных:Статьи и теги

Таблицы тегов состоят из articleId (внешнего ключа) и тега (varchar).

Теперь мне нужно сопоставить теги articles с коллекцией Article entity, доступной только для чтения, либо используя теги IList, либо теги ReadOnlyCollection.

Я ознакомился со справочными материалами NHibernate, но, похоже, не могу понять, когда использовать Set, Bag и другие коллекции Nhibernate.Я видел примеры использования коллекции ISet, но мне действительно не нравится привязывать мои классы сущностей к типу NHibernate.

Как я могу выполнить сопоставление в NHibernate?

Редактировать:В итоге я использовал <bag> вместо этого, поскольку для этого не требуется индекс:

<bag name="Tags" table="Tag" access="nosetter.camelcase" lazy="false">
  <key column="ArticleId" />
  <element column="Tag" type="System.String" />
</bag>
Это было полезно?

Решение

Тип коллекции, которую вы будете использовать в своем сопоставлении, зависит от того, как вы хотите представить коллекцию в коде.Настройки отображаются следующим образом:

  • Тот Самый <list> отображает непосредственно в список IList.
  • Тот Самый <map> сопоставляется непосредственно с IDictionary.
  • Тот Самый <bag> сопоставляет с IList.A не полностью соответствует интерфейсу IList, поскольку метод Add() не гарантирует возврат правильного индекса.Объект может быть добавлен в <bag> без инициализации IList.Убедитесь в том, что либо скройте IList от потребителей вашего API, либо сделайте его хорошо документированным.
  • Тот Самый <set> карты для Iesi.Коллекции.ISet.Этот интерфейс является частью сборки Iesi.Collections распространяется вместе с NHibernate.

итак, если вы хотите, чтобы был возвращен IList, то вам следует использовать <list> составление карты.В вашем случае я бы, вероятно, сопоставил, используя <list> составление карты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top