Alte Post ... aber falls jemand anderes kommt hier auf der Suche nach der Antwort:
Sie müssen der HasManyToMany-Mapping-Definition .AsSet() hinzufügen.
d.h.
mapping.HasManyToMany(x => x.Users)
.WithTableName("MessageReceivers")
.WithParentKeyColumn("UserId")
.WithChildKeyColumn("AdvanceMessageId")
.Inverse().AsSet();
Dies wird Setup eine einzigartige, zusammengesetzte Primärschlüsseleinschränkung auf der Link-Tabelle, die die beiden Spalten verwendet. (Clustered-Index)
Die untere Seite ist AsSet() kann nicht mit Auflistungseigenschaften vom Typ IList verwendet werden, also keine for-Schleifen ohne Casting.
Ich habe ICollection und instanziieren sie als HashSet für meine Anwendungen und es funktioniert gut.
Weitere Informationen über das Management von Sammlungen mit Fluent NHibernate:
Liste: geordnete Sammlung von Entitäten, doppelte erlaubt. Verwenden Sie eine .net IList im Code. Die Indexspalte muss in NHibernate zugeordnet werden.
Set: Ungeordnete Sammlung von eindeutigen Entitäten, Duplikate nicht erlaubt. Verwenden Sie Iesi.Collection.ISet im Code. Es ist wichtig, GetHashCode und Equals zu überschreiben, um die Geschäftsdefinition von duplicate anzugeben. Kann sortiert werden, indem eine Reihenfolge definiert wird oder indem ein Vergleicher definiert wird, der zu einem SortedSet-Ergebnis führt.
Tasche: Ungeordnete Liste von Entitäten, Duplikate zulässig. Verwenden Sie eine .net IList im Code. Die Indexspalte der Liste wird nicht zugeordnet und von NHibernate nicht berücksichtigt.
Sehr wertvolle Information; danke für das Teilen. – contactmatt