代码之家  ›  专栏  ›  技术社区  ›  Colin Bowern

在映射中检索不同的值

  •  1
  • Colin Bowern  · 技术社区  · 14 年前

    我有一个现有视图,其中包含太多数据。不幸的是,我无法摆脱它,所以我需要尝试使用我的NHibernate映射来解决它。其想法是让NH发布以下查询:

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

    此访问控制项类型列表的当前映射如下所示:

    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在其中放置一个独特的关键字?

    更新: 让我分享用户地图的其余部分,这可能有助于解释为什么它不是一个直接的标准:

    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 回复  |  直到 14 年前
        1
  •  1
  •   Colin Bowern    14 年前

    来自NHUsers邮件列表的Olivier Coanet建议将其侵入到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>();  
        })