2010-03-06 5 views
1

У меня есть существующее представление, в котором слишком много данных. К сожалению, я не могу избавиться от него, поэтому мне нужно попытаться обойти его, используя сопоставление NHibernate. Идея заключается в том, чтобы иметь NH вопрос следующий запрос:Получение различных значений при сопоставлении

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

Мой текущий отображение для этого списка типов AccessControlEntry выглядит следующим образом:

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(); 

Любые мысли о том, как получить NHibernate положить DISTINCT ключевое слово там во время запроса?

UPDATE: Поделюсь остальные карты пользователя, который может помочь, почему это не прямо вперед критерии:

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"); 

ответ

1

Оливье Coanet из NHUsers списка рассылки предложил взлом его в WithTableName, которое работало:

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>(); 
    }) 
Смежные вопросы