映射包含List的Dictionarys

时间:2009-05-19 11:25:23

标签: c# nhibernate nhibernate-mapping

我正在尝试映射包含列表的词典。

我有以下一组表格:

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; 
}

longfilterType的ID。

我正在使用此映射,但它不起作用:        

任何帮助将不胜感激:P。 TKS

1 个答案:

答案 0 :(得分: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);