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
