Словари отображения, содержащие список - PullRequest
0 голосов
/ 19 мая 2009

Я пытаюсь отобразить словарь, содержащий списки.

У меня есть следующий набор таблиц:

CREATE TABLE Item(id)

CREATE TABLE Filter(id)

CREATE TABLE FilterType(id)

CREATE TABLE ItemFilter(
 item REFERENCES Item(id),
 filter REFERENCES Filter(id),
 filterType REFERENCES FilterType(id)
)

и я хочу сделать это отображение:

class Item{
 public IDictionary<long, IList<ItemFilter>> ItemFiltersByType; 
}

long - это идентификатор filterType.

Я использовал это отображение, но оно не работает:

Буду признателен за любую помощь: P. Tks

1 Ответ

1 голос
/ 21 мая 2009

Я не думаю, что вы можете сделать то, что вы пытаетесь сделать здесь. Самым близким доступным шаблоном картирования является троичная ассоциация. Это на самом деле то, что у вас есть, но у вас нет уникального индекса. NHibernate поддерживает только необработанный интерфейс IDictionary, который не поддерживает несколько значений для одного ключа. Если у вас есть уникальное значение индекса для FilterType (которое, судя по названию, вы по праву не знаете), вы можете сделать:

<map name="ItemFiltersByType">
    <key column="Item_id" />
    <index-many-to-many class="FilterType" column="FilterType_id" />
    <many-to-many class="Filter" column="Filter_id" />
</map>

Я думаю, что лучшим решением в этом случае было бы перенести операцию в хранилище с помощью метода, подобного:

IEnumerable<Filter> GetItemFiltersByType(FilterType type);
...