5
Mam DB z poniższych tabelach:Fluent NHibernate: odwzorowywanie słownika list
- funkcje: [id, nazwisko, ...]
- Uprawnienia: [id, nazwisko, ... ]
- MetaDataDefinitions: [id, nazwisko, ...]
- RolePermissions: [id, RoleId, PermissionId, MetaDataDefinitionId] klasy
poco są:
class Role {
public Role() {
MetaDataPermissions = new Dictionary<MetaDataDefinition, Permission>() ;
}
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IDictionary<MetaDataDefinition, Permission> MetaDataPermissions { get; set; }
}
class Permission {
public Permission() {
MetaDataRoles = new Dictionary<MetaDataDefinition, Role>() ;
}
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IDictionary<Role, MetaData> RolesMetaData { get; set; }
}
class MetaData {
public MetaData() {
RolePermissions = new Dictionary<Role, Permission>() ;
}
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IDictionary<Role, Permission> RolePermissions { get; set; }
}
Fluent mapowania:
class RoleMap : ClassMap<Role> {
public RoleMap() {
[...]
HasManyToMany(x => x.MetaDataPermissions)
.Table("RolePermissions")
.AsEntityMap("MetaDataDefinitionId", "PermissionId")
.KeyColumn("RoleId") ;
[...]
}
}
class PermissionMap : ClassMap<Permission> {
public PermissionMap() {
[...]
HasManyToMany(x => x.RolesMetaData)
.Table("RolePermissions")
.AsEntityMap("RoleId", "MetaDataDefinitionId")
.KeyColumn("PermissionId") ;
[...]
}
}
class MetaDataMap : ClassMap<MetaData> {
public MetaDataMap() {
[...]
HasManyToMany(x => x.RolePermissions)
.Table("RolePermissions")
.AsEntityMap("RoleId", "PermissionId")
.KeyColumn("MetaDataDefinitionId") ;
[...]
}
}
Ale w klasach poco mi to potrzebne:
public virtual IDictionary<Role, IList<MetaData>> RolesMetaData { get; set; }
Jak takie słowniki powinny być reprezentowane w mapowaniu?