Wie kann ich meiner Entität mit NHibernate eine Liste von Zeichenfolgen zuordnen?
-
09-06-2019 - |
Frage
Ich habe zwei Tabellen in meiner Datenbank:Artikel und Tags
Die Tag-Tabellen bestehen aus ArticleID (Fremdschlüssel) und einem Tag (varchar).
Jetzt muss ich Artikel-Tags einer schreibgeschützten Sammlung in der Artikel-Entität zuordnen, entweder mithilfe von IList-Tags oder ReadOnlyCollection-Tags.
Ich habe das NHibernate-Referenzmaterial konsultiert, kann aber anscheinend nicht herausfinden, wann ich Set, Bag und die anderen Nhibernate-Sammlungen verwenden soll.Ich habe Beispiele gesehen, die die ISet-Sammlung verwenden, aber ich mag es wirklich nicht, meine Entitätsklassen an einen NHibernate-Typ zu binden.
Wie kann ich das Mapping in NHibernate durchführen?
bearbeiten:Am Ende habe ich ein verwendet <bag>
stattdessen, da kein Index erforderlich ist:
<bag name="Tags" table="Tag" access="nosetter.camelcase" lazy="false">
<key column="ArticleId" />
<element column="Tag" type="System.String" />
</bag>
Lösung
Der in Ihrer Zuordnung zu verwendende Sammlungstyp hängt davon ab, wie Sie die Sammlung im Code darstellen möchten.Die Einstellungskarte sieht folgendermaßen aus:
- Der
<list>
direkt auf ein IList. - Der
<map>
ordnet sich direkt einem IDictionary zu. - Der
<bag>
Karten zu einer IList.A entspricht nicht vollständig mit der IList-Schnittstelle, da die Add()-Methode ist nicht garantiert, dass Gibt den richtigen Index zurück.Ein Objekt kann zu einem<bag>
ohne Initialisierung der IList.Stellen Sie sicher, dass Blenden Sie entweder die IList aus dem Konsumenten Ihrer API oder machen Sie sie gut dokumentiert. - Der
<set>
wird einem Iesi.Collections.ISet zugeordnet.Das Schnittstelle ist Teil der Iesi.Collections-Assembly mit NHibernate vertrieben werden.
Wenn Sie also möchten, dass eine IList zurückgegeben wird, verwenden Sie die <list>
Kartierung.In Ihrem Fall würde ich wahrscheinlich die Karte verwenden <list>
Kartierung.