2009-01-11 17 views
8

Załóżmy, że masz dwie tabele "Użytkownicy" i "UserRoles". Oto jak dwie tabele są skonstruowane (tabela - kolumny):Fluent NHibernate question

Użytkownicy - userid (int)

UserRoles - userid (int), Rola (string)

Co chcę jest dla mojego „Użytkownikiem "klasa w mojej domenie, aby mieć IList ról. Jak skonstruować mapowanie Fluent NHibernate, aby to osiągnąć?

Odpowiedz

13

Co szukasz to zestaw elementów, które w standardzie mapowanie HBM jest:

<set name="Roles" table="UserRoles"> 
    <key column="UserID" /> 
    <element column="Role" /> 
</set> 

Dla Fluent NHibernate można mapować to tak:

HasMany<string>(x => x.Roles) 
    .AsElement("Role"); 

Może być konieczne podanie nazwy klucza za pomocą WithKeyColumn(string).

0

wierzę byłoby

public User() 
    { 
    Id(x => x.UserID); 
    HasMany<UserRoles>(x => x.UserRoles).AsBag(); 
    } 

Musisz również upewnić się zmapować klasę UserRoles oraz

+0

Rzecz polega na tym, że UserRoles nie jest klasą. To tylko lista ciągów. Moduł datatable nie łączy dwóch kluczy obcych, tylko jednego klucza obcego (UserID) i nazwy roli (łańcucha znaków). –

0

To działało również:

HasMany<Role>(u => u.Roles) 
       .WithTableName("UserRoles") 
       .Component(role => role.Map(r => r.Name)) 
       .AsList(); 

Nie trzeba mapować rola lub UserRoles.

Upewnij Rola realizuje IEquatable <Role> ;.

4

FWIW ma to zmienić minorly od dnia dzisiejszego. Obecne mapowanie to:

Powiązane problemy