El filter es invalido.
Yo habia puesto una exception en ese caso pero la cambiaron por un warning.
A parte esa cosita, esa forma de manejar la localización de strings es un
obrobio.

2010/4/23 Bilbo88 <[email protected]>

> Hola Grupo,
>
> Llevo varias semanas leyendo vuestros debates y aprendiendo cada vez
> más con vosotros.
> Ahora mismo estoy trabajando en un FrameWork con la versión 1.2 de
> NHibernate. Este framework fue encargado a una empresa externa. Llevo
> ya muchos meses intentando darle soporte y aprendiendo NHibernate ya
> que hasta hace poco solo trabajaba en C# ASP .NET
>
> Tengo bastantes dudillas que os iré planteando poco a poco.
>
> La primera de ellas es un problema con un alisa en un mapeo de una
> clase.
> Estoy intentando crear un mecanismo de multiidioma para ello utilizo
> una variable de sesión que se encarga de guardar el id del idioma en
> el que quiero que se obtengan ciertas propiedades y me he creado un
> propiedad con una formula y un filtro que es el id del idioma. Os pego
> el hbm:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
>
>  <class name="domain.ZonaDN, domain"
>        table="Zonas"
>        lazy="true"
>        schema="dbo"
>        >
>
>    <!--Heredados de GenericFWKObj-->
>    <id name="Id" column="ID" unsaved-value="0">
>      <generator class="native" />
>    </id>
>
>    <!--Heredados de GenericDomainObj-->
>
>    <property name="BorradoLogico" column="BorradoLogico"/>
>
>    <!--Heredados de GenericDomainObj-->
>    <property name="ObservacionesBD" column="ObservacionesBD" />
>    <property name="FechaAltaBD" column="FechaAltaBD" type="DateTime"/
> >
>    <property name="FechaModificacionBD" column="FechaModificacionBD"
> type="DateTime"/>
>    <property name="UsuarioAltaBD" column="UsuarioAltaBD"/>
>    <property name="UsuarioModificacionBD"
> column="UsuarioModificacionBD"/>
>
>    <!--Heredados de BasicaDN-->
>    <!--<property name="Nombre" column="Nombre"/>-->
>    <property name="Nombre"  formula=" ISNULL((SELECT
> Traducciones.Traduccion
>      FROM dbo.Traducciones
>      INNER JOIN dbo.Entities
>              ON Entities.Id = Traducciones.EntidadId
>                      AND Entities.Name = 'ZonaDN'
>                      AND Traducciones.IdiomaID =
> :Localization.LocalizationId
>      INNER JOIN dbo.Campos
>              ON Campos.Id = Traducciones.CampoId
>              AND Campos.Nombre = 'Nombre'
>      WHERE zonadn0_.ID = Traducciones.ReferenciaId),
> zonadn0_.Nombre)"/>
>
>
>
>    <property name="Descripcion" column="Descripcion"/>
>
>
>    <!--Propiedades específicas de la entidad-->
>    <property name="Tipo" column="Tipo"/>
>
>    <!--Relaciones con otras entidades-->
>    <many-to-one name="Marca" column="MarcaID" class="domain.MarcaDN,
> domain"/>
>    <many-to-one name="Delegado" column="EmpleadoID" class="
> domain.EmpleadoDN, domain"/>
>    <many-to-one name="Area" column="AreaID" class="domain.AreaDN,
> domain"/>
>
>  </class>
>
>  <filter-def name="Localization">
>    <filter-param name="LocalizationId" type='System.Int32'/>
>  </filter-def>
>
>
> </hibernate-mapping>
>
>
>
>
> El problema viene con el alias zonadn0 en algunas ocasiones NH me
> lanza la select con ese alias y en otras ocasiones con “this_”  Os
> dejo la select completa:
>
> SELECT this_.ID as ID121_1_, this_.BorradoLogico as BorradoL2_121_1_,
> this_.ObservacionesBD as Observac3_121_1_, this_.FechaAltaBD as
> FechaAlt4_121_1_, this_.FechaModificacionBD as FechaMod5_121_1_,
> this_.UsuarioAltaBD as UsuarioA6_121_1_, this_.UsuarioModificacionBD
> as UsuarioM7_121_1_, this_.Tipo as Tipo121_1_, this_.MarcaID as
> MarcaID121_1_, this_.EmpleadoID as EmpleadoID121_1_, this_.AreaID as
> AreaID121_1_,  ISNULL((SELECT Traducciones.Traduccion
>      FROM dbo.Traducciones
>      INNER JOIN dbo.Entities
>              ON Entities.Id = Traducciones.EntidadId
>                      AND Entities.Name = 'ZonaDN'
>                      AND Traducciones.IdiomaID =
> :Localization.LocalizationId
>      INNER JOIN dbo.Campos
>              ON Campos.Id = Traducciones.CampoId
>              AND Campos.Nombre = 'Nombre'
>      WHERE zonadn0_.ID = Traducciones.ReferenciaId),
> zonadn0_.Nombre) as formula1_1_,  ISNULL((SELECT
> Traducciones.Traduccion
>      FROM dbo.Traducciones
>      INNER JOIN dbo.Entities
>              ON Entities.Id = Traducciones.EntidadId
>                      AND Entities.Name = 'ZonaDN'
>                      AND Traducciones.IdiomaID =
> :Localization.LocalizationId
>      INNER JOIN dbo.Campos
>              ON Campos.Id = Traducciones.CampoId
>              AND Campos.Nombre = 'Descripcion'
>      WHERE zonadn0_.ID = Traducciones.ReferenciaId),
> zonadn0_.Descripcion) as formula2_1_, empleadodn2_.ID as ID6_0_,
> empleadodn2_.BorradoLogico as BorradoL2_6_0_,
> empleadodn2_.ObservacionesBD as Observac3_6_0_,
> empleadodn2_.FechaAltaBD as FechaAlt4_6_0_,
> empleadodn2_.FechaModificacionBD as FechaMod5_6_0_,
> empleadodn2_.UsuarioAltaBD as UsuarioA6_6_0_,
> empleadodn2_.UsuarioModificacionBD as UsuarioM7_6_0_,
> empleadodn2_.Nombre as Nombre6_0_, empleadodn2_.Apellido1 as
> Apellido9_6_0_, empleadodn2_.Apellido2 as Apellido10_6_0_,
> empleadodn2_.NSS as NSS6_0_, empleadodn2_.Direccion as Direccion6_0_,
> empleadodn2_.Urbanizacion as Urbaniz13_6_0_, empleadodn2_.Bloque as
> Bloque6_0_, empleadodn2_.Numero as Numero6_0_, empleadodn2_.Escalera
> as Escalera6_0_, empleadodn2_.Piso as Piso6_0_, empleadodn2_.Puerta as
> Puerta6_0_, empleadodn2_.CodPostal as CodPostal6_0_,
> empleadodn2_.Localidad as Localidad6_0_, empleadodn2_.Tlf as Tlf6_0_,
> empleadodn2_.TlfMovil as TlfMovil6_0_, empleadodn2_.FechaNacimiento as
> FechaNa23_6_0_, empleadodn2_.FechaAltaRegistro as FechaAl24_6_0_,
> empleadodn2_.FechaInicio as FechaIn25_6_0_, empleadodn2_.Regimen as
> Regimen6_0_, empleadodn2_.Email as Email6_0_,
> empleadodn2_.CodigoVendedor as CodigoV28_6_0_,
> empleadodn2_.Experiencia as Experie29_6_0_, empleadodn2_.FechaBaja as
> FechaBaja6_0_, empleadodn2_.Aficiones as Aficiones6_0_,
> empleadodn2_.Identificacion as Identif32_6_0_,
> empleadodn2_.ProvinciaID as Provinc33_6_0_,
> empleadodn2_.CuentaReservaID as CuentaR34_6_0_, empleadodn2_.PaisID as
> PaisID6_0_, empleadodn2_.EstudiosID as EstudiosID6_0_,
> empleadodn2_.MotivoBajaID as MotivoB37_6_0_,
> empleadodn2_.IdentificacionTipoID as Identif38_6_0_,
> empleadodn2_.ViaTipoId as ViaTipoId6_0_, empleadodn2_.SexoId as
> SexoId6_0_, empleadodn2_.InstalacionId as Instala41_6_0_,
> empleadodn2_.ConcesionarioId as Concesi42_6_0_, empleadodn2_.MarcaId
> as MarcaId6_0_ FROM dbo.Zonas this_ left outer join dbo.Empleados
> empleadodn2_ on this_.EmpleadoID=empleadodn2_.ID WHERE this_.Tipo = ?
> and this_.MarcaID = ? and this_.BorradoLogico = ? ORDER BY
> ISNULL((SELECT Traducciones.Traduccion
>      FROM dbo.Traducciones
>      INNER JOIN dbo.Entities
>              ON Entities.Id = Traducciones.EntidadId
>                      AND Entities.Name = 'ZonaDN'
>                      AND Traducciones.IdiomaID =
> :Localization.LocalizationId
>      INNER JOIN dbo.Campos
>              ON Campos.Id = Traducciones.CampoId
>              AND Campos.Nombre = 'Nombre'
>      WHERE zonadn0_.ID = Traducciones.ReferenciaId),
> zonadn0_.Nombre) asc
>
>
> ¿Existe alguna forma para que pueda controlar el nombre del alias que
> genera NH?
> Lo mismo estoy intentando matar moscas a cañonazos y hay otra forma
> más sencilla de implementar el multiidioma. En un principio esta
> parecía las flexible y rápida de implementar ya que originalmente la
> que nos habían implementado no tenía nada para multiidioma y hay que
> modificar muchas clases.
>
>
> Por cierto el parámetro se inicializa en el session de la calse public
> abstract class GenericNHibernateDao<T> : IGenericDao<T> where T :
> IGenericFWKObj, new():
> …
>
> /// <summary>
>        /// Expone la ISession usada (configurada según su sección de
> configuración) en el DAO.
>        /// </summary>
>        protected ISession session
>        {
>            get
>            {
>                try
>                {
>                    //Multiidioma
>                    Int32 sesionLocalizador = 1;
>
>                    try
>                    {
>
>                        if (HttpContext.Current != null &&
>                            HttpContext.Current.Session != null &&
>
> HttpContext.Current.Session["sesionLocalizador"] != null)
>                        {
>                            //Se inicializa Variable multiidioma
>                            sesionLocalizador =
> (Int32)HttpContext.Current.Session["sesionLocalizador"];
>                        }
>                    }
>                    catch
>                    {
>                        //El catch se produce porque no hay aun creado
> HttpContext
>                        sesionLocalizador = 1;
>                    }
>
>                    ISession s =
> NHibernateMultiSessionManager.GetSessionFrom(_sessionFactoryElementName);
>                    // UNDO: Cambiado porque hacía updates sin sentido
>                    s.FlushMode = FlushMode.Commit;
>                    //s.FlushMode = FlushMode.Never;
>
>                    //Borro filtro sesion por si se cambia durante la
> misma sesion
>                    s.DisableFilter("Localization");
>                    //Seteo con el nuevo valor de las session
>
> s.EnableFilter("Localization").SetParameter("LocalizationId",
> sesionLocalizador);
>
>                    return s;
>                }
>                catch (Exception ex)
>                {
>                    throw new FWKDataException("AdoEx", ex);
>                }
>            }
>        }
>
> …
>
>
> Espero que alguien tenga alguna idea para poder resolver esto ya que
> realmente llevo tiempo dandole vueltas y no soy capaz de avanzar.
>
> Muchas gracias a todos.
>
> Saludos
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano




-- 
Fabio Maulo

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a