2010-03-06 5 views
1

J'ai une vue existante contenant trop de données. Malheureusement, je ne peux pas m'en débarrasser, j'ai donc besoin d'essayer de contourner le problème en utilisant ma cartographie NHibernate. L'idée est d'avoir NH question la requête suivante:Récupération de valeurs distinctes dans le mappage

SELECT DISTINCT User_Id, Module_Id, Application_Id, RightsMask 
FROM V_UserApplicationPermissions 
WHERE User_Id = ? 

Ma cartographie actuelle de cette liste des types AccessControlEntry ressemble à ceci:

HasMany<AccessControlEntry>(x => x.Rights) 
    .WithTableName("V_UserApplicationPermissions") 
    .KeyColumnNames.Add("User_Id") 
    .Component(c => 
    { 
     c.Map(x => x.Module, "Module_Id"); 
     c.Map(x => x.Application, "App_Id"); 
     c.Map(x => x.Rights, "RightsMask").CustomTypeIs<ApplicationRightsType>(); 
    }) 
    .Not.LazyLoad(); 

Toute réflexion sur la façon d'avoir NHibernate mettre un mot-clé DISTINCT là pendant la requête?

MISE À JOUR: Permettez-moi de partager le reste de la carte de l'utilisateur qui pourrait aider à pourquoi il est pas un critère simple:

WithTable("Users"); 
Id(x => x.Id, "UserId"); 
Map(x => x.Name, "UserName"); 
HasMany<long>(x => x.Clients) 
    .WithTableName("V_UserClients") 
    .KeyColumnNames.Add("UserId") 
    .AsElement("ClientId"); 

Répondre

1

Olivier Coanet de la NHUsers liste de diffusion suggéré le piratage dans le WithTableName qui a travaillé:

HasMany<AccessControlEntry>(x => x.Rights) 
    .WithTableName("(SELECT DISTINCT User_Id, Module_Id, App_Id, RightsMask FROM V_UserApplicationPermissions)") 
    .KeyColumnNames.Add("User_Id") 
    .Component(c => 
    { 
     c.Map(x => x.Module, "Module_Id"); 
     c.Map(x => x.Application, "App_Id"); 
     c.Map(x => x.Rights, "RightsMask").CustomTypeIs<ApplicationRightsType>(); 
    }) 
Questions connexes