2009-05-19 2 views
0

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

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

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.

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

Любая помощь будет оценена: П. ТКС

ответ

1

Я не думаю, что вы можете делать то, что вы пытаетесь здесь. Самый близкий доступный шаблон отображения - это тройная ассоциация. Это на самом деле то, что у вас есть, но у вас нет уникального индекса. 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); 
+0

Tks, я полагал, что не мог сделать то, что хотел после нескольких часов поиска и экспериментов. Закончилось преобразование его в список и использование Linq для его группировки (его очень маленький набор элементов). – Megacan