Let\'s say you have two tables, \"Users\" and \"UserRoles\". Here\'s how the two tables are structured (table - columns):
Users - UserID (int)
UserRoles - U
What you're looking for is a of a set of elements, which in standard hbm mapping is:
<set name="Roles" table="UserRoles">
<key column="UserID" />
<element column="Role" />
</set>
For Fluent NHibernate you can map this like so:
HasMany<string>(x => x.Roles)
.AsElement("Role");
You may need to also specify the key name using WithKeyColumn(string)
.
This also worked:
HasMany<Role>(u => u.Roles)
.WithTableName("UserRoles")
.Component(role => role.Map(r => r.Name))
.AsList();
You don't need to map Role or UserRoles.
Make sure Role implements IEquatable < Role > ;.
FWIW this has change minorly of present day. The current mapping is
HasMany<string>(x => x.Roles)
.Element("Role");
I beleive it would be
public User()
{
Id(x => x.UserID);
HasMany<UserRoles>(x => x.UserRoles).AsBag();
}
You'll also have to make sure you map your UserRoles class as well