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
