ich möchte gerne mit Fluent NHibernate auf Datenbankebene eine eindeutitige n:m-Beziehung erstellen. Auf der einen Seite habe die Benutzer, auf der anderen die Gruppen:
Als Mapping verwende ich:
// Für den Benutzer HasManyToMany<Group>(x => x.Groups) .Cascade.Delete() .LazyLoad() .Table("UsersToGroups") .ParentKeyColumn("Group_id") .ChildKeyColumn("User_id");
// Für die Gruppe HasManyToMany<User>(x => x.Users) .Cascade.Delete() .LazyLoad() .Table("UsersToGroups") .ParentKeyColumn("User_id") .ChildKeyColumn("Group_id") .Inverse();
Ich verstehe leider nicht was genau deine Frage ist, dein Mapping sieht richtig aus. Wichtig ist bei bidirektionalen Many-to-Many Beziehungen, dass der .Table() Parameter den gleichen Tabellennamen benutzt, damit NHibernate die Beziehung richtig zuordnen kann.
Falls deine Frage war wie du von NHibernate die Tabellen in der Datenbank erstellen läßt, geht das so: In der FluentNHibernate Konfiguration gibst du den Befehl .ExposeConfiguration(BuildSchema) an:
Die Tabellen etc werden korrekt erstellt. Das Problem ist folgendes: Ich möchte, dass ein UNIQUE-Key auf der Datenbank erzeugt wird, damit in der Mapping Tabelle nur einmal die Kombination aus z.B. USERID01 und GROUPID01 enthalten sein kann.
Wenn zwei Client zur gleichen Zeit die Verknüpfung erstellen würden sie zweimal eingetragen, was falsch ist.