8
我的班级有一个Dictionary<string, List<string>>
类型的字段。用NHibernate映射它的最佳方式是什么?我最好把它当作一个领域,不要公开它。NHibernate:映射列表字典
非常感谢!
ulu
我的班级有一个Dictionary<string, List<string>>
类型的字段。用NHibernate映射它的最佳方式是什么?我最好把它当作一个领域,不要公开它。NHibernate:映射列表字典
非常感谢!
ulu
您不能直接映射它。有两个规则来考虑:
IList<T>
,IDictionary<K,V>
)接口把你的字符串列表插入一个类,并使用接口:
class StringList
{
IList<string> Strings { get; private set; }
}
class Entity
{
private IDictionary<string, StringList> stringDict;
}
你甚至可能看到有这样一类的一些优点。
映射:
<class name="Entity">
...
<map name="stringDict" table="Entity_StringDict" access="field">
<key column="Entity_FK"/>
<index column="Key" type="System.String"/>
<composite-element class="StringList">
<bag name="Strings" table="Entity_StringDict_Strings">
<key column="Entity_StringDict_FK"/>
<element type="System.String" column="String"/>
</bag>
</composite-element>
</map>
</class>
映射到三个表:
Entity
Entity_StringDict
Entity_FK
Key
Entity_StringDict_Strings
Entity_StringDict_FK
String
好极了,我给它一试! – ulu 2009-08-20 20:41:35
嗯我收到一个错误: XML验证错误:命名空间'urn:nhibernate-mapping-2.2'中的元素'composite-element'在命名空间'urn:nhibernate-mapping-2.2'中有无效的子元素'bag' 。预期的可能元素列表:'名称空间'urn:nhibernate-mapping-2.2'中的'parent,property,many-to-one,nested-composite-element'。 使用Nhibernate 2.0.1 .. – ulu 2009-08-21 17:16:07
此外,文档说,“复合元素可能包含组件,但不包含集合”。 – ulu 2009-08-21 18:29:48