Получение различных значений в отображении - PullRequest
1 голос
/ 06 марта 2010

У меня есть существующее представление, в котором слишком много данных.К сожалению, я не могу избавиться от этого, поэтому мне нужно попытаться обойти это, используя мое сопоставление 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 во время запроса?

ОБНОВЛЕНИЕ: Позвольте мне поделиться с остальной картой пользователя, которая может помочь понять, почему это не прямой критерий:

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 Ответ

1 голос
/ 11 марта 2010

Оливье Коане из списка рассылки 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>();  
    })  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...