Hola Fabio,

Gracias por tu contestación, aunque no acabo de entender a que te
refieres con que "El filter es invalido." Ya se que puede que la forma
para hacer la localizacion puede no ser ortodoxa. La copie de esta
web:
http://ayende.com/Blog/archive/2006/12/26/localizingnhibernatecontextualparameters.aspx

 y la modifique para que pudiese satisfacer nuestras necesidades.

¿Podrías darme algún consejo o ejemplo para mejorar la localización?
¿Sabes decirme si se puede forzar un alias al crear el mapeo de una
clase?

Muchas gracias y un saludo.

On 23 abr, 15:02, Fabio Maulo <[email protected]> wrote:
> 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);
> >                }
> >            }
> >        }
>
> > …
>
> ...
>
> leer más »

-- 
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