2009-08-20 13 views
8

Moja klasa ma pole typu Dictionary<string, List<string>>. Jaki jest najlepszy sposób na mapowanie go za pomocą NHibernate? Lepiej zostaw to jako pole, nie chcę tego ujawniać.NHibernate: mapowanie słownika list

Wielkie dzięki!

ulu

Odpowiedz

7

Nie można bezpośrednio go odwzorować. Istnieją dwie zasady, które należy rozważyć:

  • zawsze używać interfejsy kolekcji (np IList<T>, IDictionary<K,V>.)
  • NH nie obsługuje zagnieżdżonych zbiorów. Nigdy przedtem nie widziałem aplikacji przed i nigdy nie słyszałem, żeby ktoś o to prosił.

Połóż listę ciąg do klasy i wykorzystania interfejsów:

class StringList 
{ 
    IList<string> Strings { get; private set; } 
} 

class Entity 
{ 
    private IDictionary<string, StringList> stringDict; 
} 

Można nawet zobaczyć pewne korzyści z posiadania takiej klasy.

mapowanie:

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

mapy do trzech tabelach:

  • Tabela Entity
  • Tabela Entity_StringDict
    • Kolumna Entity_FK
    • Kolumna Key
  • Tabela Entity_StringDict_Strings
    • Kolumna Entity_StringDict_FK
    • Kolumna String
+0

Znakomity, dam go spróbować! – ulu

+1

Hmm Otrzymuję komunikat o błędzie: Błąd sprawdzania poprawności XML: Element "element złożony" w przestrzeni nazw "urn: nhibernate-mapping-2.2" ma nieprawidłowy element podrzędny "worek" w przestrzeni nazw "urn: nhibernate-mapping-2.2" . Lista możliwych oczekiwanych elementów: 'rodzic, właściwość, wiele do jednego, zagnieżdżony element złożony' w przestrzeni nazw 'urn: nhibernate-mapping-2.2'. Korzystanie z Nhibernate 2.0.1 .. – ulu

+0

Dokumenty mówią także: "Elementy złożone mogą zawierać komponenty, ale nie kolekcje". – ulu

Powiązane problemy