Hola Sergio,
Implemente una clase que me administre las secciones de configuración
del web config.
Imports System.Configuration
Public NotInheritable Class NHibernateConfigurationSection
Inherits ConfigurationSection
Private Shared _Properties As ConfigurationPropertyCollection
Private Shared strHibernateFile As New ConfigurationProperty
("hibernate", GetType(String), "hibernate.cfg.xml",
ConfigurationPropertyOptions.IsRequired)
Private Shared strMappingPath As New ConfigurationProperty
("Mapping", GetType(String), "",
ConfigurationPropertyOptions.IsRequired)
Public Sub New()
_Properties = New ConfigurationPropertyCollection()
_Properties.Add(strHibernateFile)
_Properties.Add(strMappingPath)
End Sub
Protected Overrides ReadOnly Property Properties() As
ConfigurationPropertyCollection
Get
Return _Properties
End Get
End Property
Protected Overrides Function GetRuntimeObject() As Object
Return MyBase.GetRuntimeObject()
End Function
<StringValidator(InvalidCharacters:=" ~...@#$%^&*()[]{}/;'|\",
MinLength:=1, MaxLength:=60)> _
Public Property HibernateFile() As String
Get
Return CStr(Me("hibernate"))
End Get
Set(ByVal value As String)
Me("hibernate") = value
End Set
End Property
<StringValidator(InvalidCharacters:=" ~...@#$%^&*()[]{};'|",
MinLength:=1, MaxLength:=60)> _
Public Property MappingPath() As String
Get
Return CStr(Me("Mapping"))
End Get
Set(ByVal value As String)
Me("Mapping") = value
End Set
End Property
End Class
y la llamo desde mi Helper de esta manera:
Public Class NHibernateHelper
Private Const CurrentSessionKey As String =
"nhibernate.current_session"
Public Shared SessionFactory As ISessionFactory
Shared Sub New()
Try
Dim configurationSection As
NHibernateConfigurationSection.CurrentConfiguration ' Esta linea no me
reconoce
log4net.Config.XmlConfigurator.Configure()
Dim cfg As Configuration = New Configuration
cfg.Configure(configurationSection.HibernateFile)
Dim path As New DirectoryInfo(CStr
(configurationSection.MappingPath))
cfg.AddDirectory(path)
SessionFactory = cfg.BuildSessionFactory
Catch ex As Exception
Throw New Exception("NHibernate initializacion failed",
ex)
End Try
End Sub
.
.
.
End Class
Pero tengo un inconveniente no me reconoce esta propiedad
"CurrentConfiguration" de la clase que implemente , quizas estoy
obviando u olvidando algo,
espero me des luces...
Gracias nuevamente
On 22 ene, 12:33, Kash <[email protected]> wrote:
> No tengo mucho tiempo para comentar, en el link que te he enviado hay un
> ejemplo de creación de una clase que gestiona una sección de configuración
> del web.config o app.config.
> Esa clase se puede utilizar desde cualquier capa, ensamblado, ... Yo lo
> estoy haciendo así y funciona perfectamente.
>
> Implemento esa clase, y la utilizo desde la capa de presentación (en mi caso
> desde mi NHibernateHelper propio de esta forma:
>
> public NHibernateHelper()
> {
> //Cargamos los datos del fichero de configuración
> DALGeneralConfigurationSection cfg =
> DALGeneralConfigurationSection.CurrentConfiguration;
> //Forma de acceder a la configuración XML de NHibernate y crear
> un sessionFactory...
> sessionFactory = new
> NHibernate.Cfg.Configuration().Configure(cfg.NHibernateConfigPath
> ).BuildSessionFactory();
> currentSession = null;
> }
>
> DALGeneralConfigurationSection es la clase de configuración
> cfg.NHibernateConfigPath es una propiedad de la sección de configuración que
> gestiona la clase implementada.
>
> y así se especifica en el fichero de configuración:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <configuration>
>
> <configSections>
> <section name="DALGeneral"
> type="Configuration.DataAccessLayer.DALGeneralConfigurationSection,
> Configuration, Version=4.0.0.1, Culture=neutral,
> PublicKeyToken=a5dcdbb4fcb73170" allowDefinition="Everywhere"
> allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
>
> <DALGeneral nhibernateConfigPath="c:\test\hibernate.cfg.xml" />
>
> </configuration>
>
> Lo he puesto un poco deprisa, puede haber errores...
>
> El 22 de enero de 2009 18:13, Jose Fabricio Rojas
> <[email protected]>escribió:
>
>
>
>
>
> > Hola Sergio,
> > bueno gracias por link , pero crear las secciones de configuracion en
> > el web config no es problema ,sino leer sus valores desde otra capa
> > ( en mi caso , mi capa de acceso a datos)
> > Algo asi como lo que hace Enterprise Library en un paquete de Datos ,
> > cuando la la factoria abstracta Database obtiene la cadena de conexion
> > del web config solo con pasarle el nombre de la cadena de conexion.
>
> > On 22 ene, 12:02, Kash <[email protected]> wrote:
> > >http://msdn.microsoft.com/es-es/library/system.configuration.configur...
> > > El 22 de enero de 2009 17:54, Jose Fabricio Rojas
> > > <[email protected]>escribió:
>
> > > > Hola gente
> > > > este es mi problema:
> > > > Previo: Sucede que mi aplicación tiene una parte de los archivos de
> > > > mapeo(hbm) incrustados y otra parte en una carpeta, esto debido a que
> > > > los que están en la carpeta contienen consultas nombradas y es un
> > > > requerimiento personalizar y cambiar esas consultas nombradas sin
> > > > necesidad de un re-build a la aplicación.
> > > > Ahora mediante el BuildSessionFactory() yo cargo los archivos hbm
> > > > incrustados y mediante el cfg.AddDirectory(path) cargo los archivos de
> > > > mapeo que se encuentran dentro de una ruta de disco duro.
> > > > Lo que estaba haciendo hasta ahora es crear una clave en el registro y
> > > > colocar la ruta en la clave de registro , leer la clave para obtener
> > > > el path en donde estaban los hbm y el archivo de configuracion de NH
> > > > (hibernate.cfg.xml para mi caso)
> > > > Sucede que por "seguridad" se ha decidido cambiar esto
> > > > Problema:
> > > > Ahora en mi capa de acceso a datos tengo una clase que me administra
> > > > las sesiones de NH y obtiene la ruta del archivo de configuracion y
> > > > ruta de la carpeta de los hbm no incrustados, y construye mis sesiones
> > > > a partir de eso.
> > > > Lo que quisiera hacer es: Crear una seccion dentro del web.config con
> > > > dos key, una donde apunte a la ruta de mi archivo de configuracion y
> > > > otra clave donde apunte a mi carpeta que contiene los hbm no
> > > > incrustados.
> > > > Como puedo , o que clases utilizar para que que mi clase que
> > > > administra las sesiones vaya hasta el web.config(que esta en mi capa
> > > > de presentacion web) y lea esas key y contruya la sesion de NH a
> > > > partir de eso.
> > > > Estaria muy agradecido por su ayuda.
> > > > Un saludo desde Lima ,Peru
>
> > > --
>
> > > =================================
> > > Sergio Castillo Checa
>
> --
>
> =================================
> Sergio Castillo Checa
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---