Как я могу сопоставить список строк с моей сущностью, используя NHibernate?
-
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>
составление карты.