Raul Carlomagno | 1 Jul 05:35
Picon

Re: consulta sobre performance en primeras consultas


es porque crea la sessionfactory, que te va a brindar las isessions
que necesites en el futuro, la creacion de la sessionfactory es un
laburo pesado que lleva validar los xml de mapeo, talvez algo de
reflection y algunas cosas mas

On 25 jun, 23:17, Nicolas <nicostab...@gmail.com> wrote:
> Hola a todos, desde ya muchas gracias por las respuestas en estos primeros
> meses que llevo con nhibernate me han ayudado mucho, el motivo de este mail
> es el siguiente, en mi aplicacion las primeras consultas en un fomulario
> tardan aproximadamente 2 segundos, aclaro que las consultas son simples como
> relleno de combos para un formulario de abm, luego la segunda vez que
> ejecuto la misma consulta, se realiza de forma inmediata. Obviamente no les
> pido una solucion porque sé que es muy dificil ver todo lo que estoy
> haciendo, simplemente queria saber si alguna vez les pasó, y por donde
> tendria que empezar para encontrar la solucion a este inconveniente.
>
> Desde ya muchas gracias,
>                                              saludos,
>
>                                                                Nicolas.
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

ernestmartin | 1 Jul 14:05
Picon
Picon
Favicon

Composite-element con columnas con valor null dentro de un map es ignorado


Hola a todos.

Estoy intentando crear una entidad que contenga propiedades con textos
en varios idiomas y para ello he creado una clase Product (la entidad)
con algo tan simple como esto:

-------------------------------------------------
public virtual string Name { get; set; }

public virtual IDictionary<Culture, CultureText> CultureTexts
{
        get { return cultureTexts; }
        protected set { cultureTexts = value; }
}
private IDictionary<Culture, CultureText> cultureTexts = new
Dictionary<Culture, CultureText>();
-------------------------------------------------

CultureText es la clase correspondiente al composite-element y su
contenido es este:

-------------------------------------------------
public virtual string Description { get; set; }
public virtual string OtherDetails { get; set; }
-------------------------------------------------

Culture contiene esto:

-------------------------------------------------
(Continue reading)

Nicolas | 7 Jul 14:31
Picon

Error con la _activeSession

Hola a todos hace un tiempo envié una consulta acerca de la performance en el primer hit de nhibernate, gracias a sus respuestas que me han guiado me he dado cuenta que realmente manejaba mal tanto el repository como el session factory, por lo que he decidido cambiar, gracias a un ejemplo de Dario que encontré en la web decidí utilizar la clase Repository y SessionFactory de ese ejemplo. Lo unico que no utilizo es un Repository para cada clase sino que utilizo una fachada general que llama al repository, ahora el inconveniente que me surge es raro, sin debuguear me tira un error como que la _ activeSession del repository es null y cuando debugueo me trae ( a modo de ejemplo una lista de proveedorees ) de manera correcta, continuo debugueando y al querer traer una lista de categorias me dice que la sesion fue close or Dispose.
 A continuacion Adjunto el Repository, la SessionFactory, La FachadaPersistecia y el codigo del controller donde llamo para traer los datos..
Nosé si ésta es la forma de enviar el código ya que nunca mandé, desde ya corregirme si me he equivocado. estoy trabajando con Winforms.
 
Creo que debo tener un error algo básico por el cual no me trae los datos ya que soy inexperto, aclaro que los mappings ya estan probados y funcionan correctamente.
 
desde ya mil gracias,
 
                                     saludos a todos,
                                                                    Nicolas.
 
 

--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

 public class Repository
    {
        private static Repository _repository;
        private SessionFactory _sessionFactory;
        private ISession _activeSession;

        public Repository()
        {
            _sessionFactory = SessionFactory.Instance;
        }

        public static Repository Current
        {
            get
            {
                if (_repository == null)
                {
                    _repository = new Repository();

                }

                if (System.Web.HttpContext.Current != null)
                {
                    if (System.Web.HttpContext.Current.Items["NhRepository"] == null)
                        System.Web.HttpContext.Current.Items["NhRepository"] = _repository;

                    return (Repository)System.Web.HttpContext.Current.Items["NhRepository"];
                }
                else
                {

                    return _repository;

                }



            }
        }

        #region Session Methods

        public void OpenSession()
        {
            if (_activeSession == null || (_activeSession != null && !_activeSession.IsOpen))
                _activeSession = _sessionFactory.GetSession();
            else
                throw new ApplicationException("The repository already has an open session");
        }

        public void FlushSession()
        {
            if (_activeSession != null && _activeSession.IsOpen)
                _activeSession.Flush();
        }

        public void CloseSession()
        {
            if (_activeSession != null)
            {
                if (_activeSession.IsOpen)
                    _activeSession.Close();

                _activeSession.Dispose();
            }
        }

        public ISession Session
        {
            get
            {
                if (_activeSession == null || (_activeSession != null && !_activeSession.IsOpen))
                    this.OpenSession();

                return _activeSession;
            }
        }

        public void BeginTransaccion()
        {
            _activeSession.Transaction.Begin();
        }

        public void CommitTransaction()
        {
            _activeSession.Transaction.Commit();
        }

        public void RoolbackTransaction()
        {
            _activeSession.Transaction.Rollback();
        }
        #endregion

        #region Object Methods

        public void SaveObject(object obj)
        {
            _activeSession.Save(obj);
        }

        public void UpdateObject(object obj)
        {
            _activeSession.Update(obj);
        }

        public void DeleteObject(object obj)
        {
            _activeSession.Delete(obj);
        }


        #endregion


        #region Metodos Extendidos


        public IList<T> GetAll<T>()
        {
            ICriteria crit = _activeSession.CreateCriteria(typeof(T));
            return crit.List<T>();
        }
	#endregion

    }
public class FachadaRepository
    {
 

        

        #region METODOS

        public  void BeginTransaction() {

            Repository.Current.BeginTransaccion();
        }

        public  void CommitTransaction()
        {

            Repository.Current.CommitTransaction();

        }

        public void RollbackTransaction()
        {
            Repository.Current.RoolbackTransaction();

        }


        public virtual void guardar(ObjetoPersistente obj)
        {
            Repository.Current.SaveObject(obj);
        }


        public virtual void Update(ObjetoPersistente pObject)
        {
            Repository.Current.UpdateObject(pObject);
        }

        public virtual void cerrarSesion()
        {

            Repository.Current.CloseSession();
        }




         public IList<T> GetAll<T>()
        {
            return Repository.Current.GetAll<T>();
            
          }

}  
  public class 
    {
        //private static SessionFactory _session = new SessionFactory();
        private static SessionFactory _session = null;
        private Configuration _nhConfiguration;
        private ISessionFactory _sessionFactory;

        protected SessionFactory()
        {
            //
            // TODO: Add constructor logic here
            //
            this.RegisterClasses();
        }

        private void RegisterClasses()
        {
            _nhConfiguration = new Configuration();
            _nhConfiguration.Configure("hibernate.cfg.xml");
            _sessionFactory = _nhConfiguration.BuildSessionFactory();
        }

        //public static SessionFactory Instance
        //{
        //    get{return _session;}
        //}

        public static SessionFactory Instance
        {
            get
            {
                if (_session == null)
                    _session = new SessionFactory();

                return _session;
            }
        }

        public ISession GetSession()
        {
            return _sessionFactory.OpenSession();
        }

        public ISessionFactory GetNHibernateFactory()
        {
            return _sessionFactory;
        }
    }
        public IList<Proveedor> GetProveedores()
        {
            try
            {
                FachadaRepository fr = new FachadaRepository();
                 Proveedor proveedor = new Proveedor();
                 IList<Proveedor> listObj = fr.GetAll<Proveedor>(); 
                fr.cerrarSesion();
                return result;
             }  
     catch (Exception ex)
            {
               
                throw (ex);
            }  

	} 


   public IList<Categoria> GetCategorias()
        {
            try
            {
                FachadaRepository fr = new FachadaRepository();
                Categoria categ=new Categoria();
                IList<Categoria> listObj = fr.GetAll<Categoria>();      
                fr.cerrarSesion();
                return result;
                }                         
            catch (Exception ex)
            {
                
                throw (ex);
            }                        
         }
 	   cmbProveedores.DataSource = _controller.GetProveedores();
            cmbProveedores.DisplayMember = "NombreComercial";
            cmbProveedores.ValueMember = "IdProveedor";
            cmbProveedores.Text = "";
            //combo box categoria
            cmbCategoria.DataSource = _controller.GetCategorias();
            cmbCategoria.DisplayMember = "Nombre";
            cmbCategoria.ValueMember = "IdCategoria";
            cmbCategoria.Text = "";
Carlos Peix | 7 Jul 19:57
Picon

Re: Error con la _activeSession

Hola Nicolas,

Parece que has recortado el codigo para enviarlo, pero igual se nota
la idea. Te tiro unas ideas sobre tu codigo y te adjunto los archivos
modificados:

- No es buena idea tener variables static por todos lados, son
peligrosas y conducen a diseños poco flexibles.

- No es bueno incluir en los repositorios semantica de transacciones.
Esta aproximacion queda corta cuando tengas transacciones que abarcan
mas de un repositorio.

- No entiendo el sentido de FachadaRepository, incluso diria que vas
por un callejon sin salida. Ademas, tal como esta implementada, no
agrega ningun servicio. Sugiero que te olvides de esta clase.

- Con respecto a tu clase SessionFactory, creo que no es un buen
nombre, lo le pondria SessionFactoryHolder o algo similar. De esta
manera refleja mejor su fin.

- Fijate que te simplifique enormemente la clase Repository al sacarle
responsabilidades de transaccion.

- Fijate que modifique los metodos del controller, ahi creo
directamente al repositorio pasandole como parametro el session
holder.

- El lugar para controlar transacciones es el controller o, mejor aun,
en un HTTPModule por encima del controller.

- Este codigo es un primer paso orientado al uso de inyeccion de
dependencias, de ahi que los repositorios reciban el session factory
holder en el constructor.

- Una vez implementada inyeccion de dependencias, los repositorios se
los pedis al container o inyectas en el controller un el repositorio
o, directamente, un RepositoryFactory.

Paro aca, no quiero marearte.

2009/7/7 Nicolas <nicostabile <at> gmail.com>:
> Hola a todos hace un tiempo envié una consulta acerca de la performance en
> el primer hit de nhibernate, gracias a sus respuestas que me han guiado me
> he dado cuenta que realmente manejaba mal tanto el repository como el
> session factory, por lo que he decidido cambiar, gracias a un ejemplo de
> Dario que encontré en la web decidí utilizar la clase Repository y
> SessionFactory de ese ejemplo. Lo unico que no utilizo es un Repository para
> cada clase sino que utilizo una fachada general que llama al repository,
> ahora el inconveniente que me surge es raro, sin debuguear me tira un error
> como que la _ activeSession del repository es null y cuando debugueo me trae
> ( a modo de ejemplo una lista de proveedorees ) de manera correcta, continuo
> debugueando y al querer traer una lista de categorias me dice que la sesion
> fue close or Dispose.
>  A continuacion Adjunto el Repository, la SessionFactory, La
> FachadaPersistecia y el codigo del controller donde llamo para traer los
> datos..
> Nosé si ésta es la forma de enviar el código ya que nunca mandé, desde ya
> corregirme si me he equivocado. estoy trabajando con Winforms.
>
> Creo que debo tener un error algo básico por el cual no me trae los datos ya
> que soy inexperto, aclaro que los mappings ya estan probados y funcionan
> correctamente.

-- 
Carlos Peix

--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

public IList<Proveedor> GetProveedores()
{
	try
	{
		Repository repo = new Repository(SessionFactory.Instance);
		IList<Proveedor> result = repo.GetAll<Proveedor>();
		SessionFactory.Instance.GetCurrentSession().Flush();
		return result;
	 }  
	catch (Exception ex)
	{
		throw (ex);
	}
} 

public IList<Categoria> GetCategorias()
{
	try
	{
		Repository repo = new Repository(SessionFactory.Instance);
		IList<Categoria> result = repo.GetAll<Categoria>();
		SessionFactory.Instance.GetCurrentSession().Flush();
		return result;
	}
	catch (Exception ex)
	{
		throw (ex);
	}
 }
public class Repository
{

	SessionFactory _sfh;
	
	public Repository(SessionFactory sfh)
	{
		_sfh = sfh;
	}

	#region Session Methods
	private ISession Session
	{
		get
		{
			return _sfh.GetCurrentSession();;
		}
	}
	#endregion

	#region Object Methods

	public void Save(object obj)
	{
		Session.Save(obj);
	}

	public void Update(object obj)
	{
		Session.Update(obj);
	}

	public void Delete(object obj)
	{
		Session.Delete(obj);
	}

	#endregion

	#region Metodos Extendidos

	public IList<T> GetAll<T>()
	{
		ICriteria crit = Session.CreateCriteria(typeof(T));
		return crit.List<T>();
	}
	
	#endregion

}
public class 
{
	private static SessionFactory _instance = null;
	private Configuration _nhConfiguration;
	private ISessionFactory _sessionFactory;

	protected SessionFactory()
	{
		_nhConfiguration = new Configuration();
		_nhConfiguration.Configure("hibernate.cfg.xml");
		_sessionFactory = _nhConfiguration.BuildSessionFactory();
	}

	public static SessionFactory Instance
	{
		get
		{
			if (_instance == null)
				_instance = new SessionFactory();

			return _instance;
		}
	}

	public ISession GetCurrentSession()
	{
		if (System.Web.HttpContext.Current != null)
		{
			if (System.Web.HttpContext.Current.Items["NHSession"] == null)
				System.Web.HttpContext.Current.Items["NHSession"] = _sessionFactory.OpenSession();

			return (Repository)System.Web.HttpContext.Current.Items["NHSession"];
		}
		else
		{
			// TODO: construir aqui soporte para entornos no WEB
			throw NotSupportedException("SessionFactory solo tiene soporte para entornos Web");
		}
	}

}
Raul Carlomagno | 8 Jul 01:24
Picon

Re: Error con la _activeSession


estas en winform, elegiste un escenario donde es dificil y cuesta
determinar el ciclo de vida de tus ISession
lo que te voy a decir no viene a tu pregunta, pero
como estas manejando el lazy load? haces siempre un fetch y te traes
todo a mem y no usas lazy?

On 7 jul, 09:31, Nicolas <nicostab...@gmail.com> wrote:
> Hola a todos hace un tiempo envié una consulta acerca de la performance en
> el primer hit de nhibernate, gracias a sus respuestas que me han guiado me
> he dado cuenta que realmente manejaba mal tanto el repository como el
> session factory, por lo que he decidido cambiar, gracias a un ejemplo de
> Dario que encontré en la web decidí utilizar la clase Repository y
> SessionFactory de ese ejemplo. Lo unico que no utilizo es un Repository para
> cada clase sino que utilizo una fachada general que llama al repository,
> ahora el inconveniente que me surge es raro, sin debuguear me tira un error
> como que la _ activeSession del repository es null y cuando debugueo me trae
> ( a modo de ejemplo una lista de proveedorees ) de manera correcta, continuo
> debugueando y al querer traer una lista de categorias me dice que la sesion
> fue close or Dispose.
>  A continuacion Adjunto el Repository, la SessionFactory, La
> FachadaPersistecia y el codigo del controller donde llamo para traer los
> datos..
> Nosé si ésta es la forma de enviar el código ya que nunca mandé, desde ya
> corregirme si me he equivocado. estoy trabajando con Winforms.
>
> Creo que debo tener un error algo básico por el cual no me trae los datos ya
> que soy inexperto, aclaro que los mappings ya estan probados y funcionan
> correctamente.
>
> desde ya mil gracias,
>
>                                      saludos a todos,
>                                                                     Nicolas.
>
>  Repository.txt
> 4 KVerDescargar
>
>  FachadaRepository.txt
> 1 KVerDescargar
>
>  SessionFactory.txt
> 1 KVerDescargar
>
>  metodo del Controller.txt
> 1 KVerDescargar
>
>  llamada desde el form.txt
> < 1 KBVerDescargar
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Nicolas | 8 Jul 02:26
Picon

Re: Error con la _activeSession

Hola carlos, y Raul desde ya mil gracias por sus respuestas, carlos ahora estoy viendo el codigo cuando lo termine de procesar vuelvo a preguntar, Raul si uso lazy load = true por lo que he comprobado que me resulta muy complicado manejar la session, de hecho me tengo que fijar con mucho cuidado cuando la cierro  y cuando no, es realmente dificil y para sincerarme creo que voy al caos por este lado, pero me está costando bastante este tema de la session, debo ser muy duro!!, si hay un ejemplo se agradece!!
 
desde ya mil gracias por las respuestas, son muy generosos, proceso la info y vuelvo a preguntar,

saludos,
 
             Nicolas.
 
 
El 7 de julio de 2009 20:24, Raul Carlomagno <rcarlomagno <at> gmail.com> escribió:

estas en winform, elegiste un escenario donde es dificil y cuesta
determinar el ciclo de vida de tus ISession
lo que te voy a decir no viene a tu pregunta, pero
como estas manejando el lazy load? haces siempre un fetch y te traes
todo a mem y no usas lazy?



On 7 jul, 09:31, Nicolas <nicostab... <at> gmail.com> wrote:
> Hola a todos hace un tiempo envié una consulta acerca de la performance en
> el primer hit de nhibernate, gracias a sus respuestas que me han guiado me
> he dado cuenta que realmente manejaba mal tanto el repository como el
> session factory, por lo que he decidido cambiar, gracias a un ejemplo de
> Dario que encontré en la web decidí utilizar la clase Repository y
> SessionFactory de ese ejemplo. Lo unico que no utilizo es un Repository para
> cada clase sino que utilizo una fachada general que llama al repository,
> ahora el inconveniente que me surge es raro, sin debuguear me tira un error
> como que la _ activeSession del repository es null y cuando debugueo me trae
> ( a modo de ejemplo una lista de proveedorees ) de manera correcta, continuo
> debugueando y al querer traer una lista de categorias me dice que la sesion
> fue close or Dispose.
>  A continuacion Adjunto el Repository, la SessionFactory, La
> FachadaPersistecia y el codigo del controller donde llamo para traer los
> datos..
> Nosé si ésta es la forma de enviar el código ya que nunca mandé, desde ya
> corregirme si me he equivocado. estoy trabajando con Winforms.
>
> Creo que debo tener un error algo básico por el cual no me trae los datos ya
> que soy inexperto, aclaro que los mappings ya estan probados y funcionan
> correctamente.
>
> desde ya mil gracias,
>
>                                      saludos a todos,
>                                                                     Nicolas.
>
>  Repository.txt
> 4 KVerDescargar
>
>  FachadaRepository.txt
> 1 KVerDescargar
>
>  SessionFactory.txt
> 1 KVerDescargar
>
>  metodo del Controller.txt
> 1 KVerDescargar
>
>  llamada desde el form.txt
> < 1 KBVerDescargar
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Raul Carlomagno | 8 Jul 04:29
Picon

Re: Error con la _activeSession


fabio maulo creo el proyecto unhaddins, no se si alguien mas, creo que
gustavo ringel si no me equivoco, va, no viene al caso.
si no escuchaste hablar aca hay varios posts donde recomiendan usar
unhaddins (agregados fuera del alcance de nh) para el manejo de las
sesiones, implementa un patron para controlar las conversaciones de
persistencia, que viene muy bien cuando trabajas con winforms
http://groups.google.com/group/unhaddins

On 7 jul, 21:26, Nicolas <nicostab...@gmail.com> wrote:
> Hola carlos, y Raul desde ya mil gracias por sus respuestas, carlos ahora
> estoy viendo el codigo cuando lo termine de procesar vuelvo a preguntar,
> Raul si uso lazy load = true por lo que he comprobado que me resulta muy
> complicado manejar la session, de hecho me tengo que fijar con mucho cuidado
> cuando la cierro  y cuando no, es realmente dificil y para sincerarme creo
> que voy al caos por este lado, pero me está costando bastante este tema de
> la session, debo ser muy duro!!, si hay un ejemplo se agradece!!
>
> desde ya mil gracias por las respuestas, son muy generosos, proceso la info
> y vuelvo a preguntar,
>
> saludos,
>
>              Nicolas.
>
> El 7 de julio de 2009 20:24, Raul Carlomagno <rcarloma...@gmail.com>escribió:
>
>
>
> > estas en winform, elegiste un escenario donde es dificil y cuesta
> > determinar el ciclo de vida de tus ISession
> > lo que te voy a decir no viene a tu pregunta, pero
> > como estas manejando el lazy load? haces siempre un fetch y te traes
> > todo a mem y no usas lazy?
>
> > On 7 jul, 09:31, Nicolas <nicostab...@gmail.com> wrote:
> > > Hola a todos hace un tiempo envié una consulta acerca de la performance
> > en
> > > el primer hit de nhibernate, gracias a sus respuestas que me han guiado
> > me
> > > he dado cuenta que realmente manejaba mal tanto el repository como el
> > > session factory, por lo que he decidido cambiar, gracias a un ejemplo de
> > > Dario que encontré en la web decidí utilizar la clase Repository y
> > > SessionFactory de ese ejemplo. Lo unico que no utilizo es un Repository
> > para
> > > cada clase sino que utilizo una fachada general que llama al repository,
> > > ahora el inconveniente que me surge es raro, sin debuguear me tira un
> > error
> > > como que la _ activeSession del repository es null y cuando debugueo me
> > trae
> > > ( a modo de ejemplo una lista de proveedorees ) de manera correcta,
> > continuo
> > > debugueando y al querer traer una lista de categorias me dice que la
> > sesion
> > > fue close or Dispose.
> > >  A continuacion Adjunto el Repository, la SessionFactory, La
> > > FachadaPersistecia y el codigo del controller donde llamo para traer los
> > > datos..
> > > Nosé si ésta es la forma de enviar el código ya que nunca mandé, desde ya
> > > corregirme si me he equivocado. estoy trabajando con Winforms.
>
> > > Creo que debo tener un error algo básico por el cual no me trae los datos
> > ya
> > > que soy inexperto, aclaro que los mappings ya estan probados y funcionan
> > > correctamente.
>
> > > desde ya mil gracias,
>
> > >                                      saludos a todos,
>
> > Nicolas.
>
> > >  Repository.txt
> > > 4 KVerDescargar
>
> > >  FachadaRepository.txt
> > > 1 KVerDescargar
>
> > >  SessionFactory.txt
> > > 1 KVerDescargar
>
> > >  metodo del Controller.txt
> > > 1 KVerDescargar
>
> > >  llamada desde el form.txt
> > > < 1 KBVerDescargar
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Julio | 10 Jul 13:57
Picon

Formula en un key-property


Tengo que conectar con una BBDD en Oracle.
Una de las tablas tiene una clave primaria con dos campos:

 <composite-id name="IdDosisAdministrada" >
      <key-property name="Episodio"
column="Episodio"             type="Decimal"  />

 </composite-id>

El campo Linea_Adm se ha de obtener usando una función de oracle
creada para tal fin.

El caso es que probé esto:
 <key-property name="Linea_Adm" column="Linea_Adm" type="Int32"
formula="SELECT linea_ghepdosma() FROM DUAL"/>

Pero provocaba una excepción diciéndome que no se ha declarado el
atributo fórmula:
ex = {"....Entidades.mapping.DosisAdministrada.hbm.xml(9,86): XML
validation error: No se ha declarado el atributo 'formula'."}

El caso es que probablemente hay bastante (o todo) que se me escape o
no entienda.
Agradecería cualquier ayuda con este tema.
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Dario Quintana | 10 Jul 15:06
Picon
Gravatar

Re: Formula en un key-property

Hola Julio

Formula es para usarlo en el tag <property/> http://nhforge.org/blogs/nhibernate/archive/2009/04/08/nhibernate-mapping-lt-property-gt.aspx

Y por lo que veo estás usándolo como si fuera un <key-property>.

Saludos

2009/7/10 Julio <bajulio88 <at> gmail.com>

Tengo que conectar con una BBDD en Oracle.
Una de las tablas tiene una clave primaria con dos campos:

 <composite-id name="IdDosisAdministrada" >
     <key-property name="Episodio"
column="Episodio"             type="Decimal"  />

 </composite-id>

El campo Linea_Adm se ha de obtener usando una función de oracle
creada para tal fin.


El caso es que probé esto:
 <key-property name="Linea_Adm" column="Linea_Adm" type="Int32"
formula="SELECT linea_ghepdosma() FROM DUAL"/>

Pero provocaba una excepción diciéndome que no se ha declarado el
atributo fórmula:
ex = {"....Entidades.mapping.DosisAdministrada.hbm.xml(9,86): XML
validation error: No se ha declarado el atributo 'formula'."}



El caso es que probablemente hay bastante (o todo) que se me escape o
no entienda.
Agradecería cualquier ayuda con este tema.




--
Dario Quintana
http://darioquintana.com.ar

--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Nicolas | 12 Jul 15:17
Picon

Consulta Sobre Schemas

Hola a todos, de nuevo muchas gracias por sus respuestas, cada dia aprendo un poco mas sobre esto que es nhibernate y en eso han tenido mucho que ver, cuanto más leo más hacia atrás voy!, esta vez mi consulta es sobre el schema de mi db, como crearlos y como deberian estar definidos los archivos de mapping xml para crearlos? He escuchado, ( y  no me maten por esto se que es muy basico ) que por ejemplo con agregar los mapping y la clase del dominio no necesito ni abrir el SQL para crear la tabla (creando mi schema ), esto no lo sabia y ya tengo creados mi xml. La pregunta es qué deberia estar definido en los xml para que el schema se cree y cómo se crea.
Adjunto dos xml de ciudad y provincia ( como ejemplo ) y las clases de dominio correspondientes ( por las dudas ). y mi hibernate.cfg.xml.
 
hibernate.cfg.xml ------------------------------------------------------------------------
 
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
 <session-factory name="ModeloDeDominioSSG">
  <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
  <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
  <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
  <property name="connection.connection_string">Data Source=localhost;Initial Catalog=tesis;Integrated Security=True</property>
  <property name="current_session_context_class"> uNhAddIns.SessionEasier.Conversations.ThreadLocalConversationalSessionContext, uNhAddIns </property>
  <property name="prepare_sql">false</property>
  <property name="use_outer_join">false</property>
  <property name="isolation">ReadCommitted</property>
  <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
  <property name="show_sql">true</property>
  <mapping assembly="ModeloDeDominioSSG" />
 </session-factory>
</hibernate-configuration>
 
 
 
 
XML PROVINCIA --------------------------------------------------------------
 
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ModeloDeDominioSSG" namespace="ModeloDeDominioSSG.ModeloDeDominio" auto-import="true">
  <class name="Provincia" lazy="true" table="Provincias">
<!--Identificador de la AProvincia-->
    <id name="IdProvincia" column="idProvincia" type="int">
      <generator class="native" />
    </id>
<!--Propiedades de la Provincia-->
    <property name="Nombre" column="nombre" />
 <property name="Eliminado" column="eliminado" />
  
  
   <bag name="ListCiudades" cascade="all-delete-orphan" lazy="true">
    <key column="idProvincia"/>
    <one-to-many class="Ciudad"/>
   </bag>
  </class>
</hibernate-mapping>
 
XML CIUDAD ----------------------------------------------------------------------
 
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ModeloDeDominioSSG" namespace="ModeloDeDominioSSG.ModeloDeDominio" auto-import="true">
  <class name="Ciudad" lazy="true" table="Ciudades">
<!--Identificador del ContactoPersonal-->
    <id name="IdCiudad" column="idCiudad" type="int">
      <generator class="native" />
    </id>
<!--Propiedades del ContactoPersonal-->
    <property name="Nombre" column="nombre" />
 <property name="Eliminado" column="eliminado" />
  
  
<!--Relación 1..* de ContactoPersonal con Cargo-->
 <many-to-one name="AProvincia" column="idProvincia" class="Provincia" cascade="none"/>
  </class>
</hibernate-mapping>
CLASE PROVINCIA ----------------------------------------------------------------
 
using System.Collections.Generic;
namespace ModeloDeDominioSSG.ModeloDeDominio
{
    public class Provincia     {
//*****Propiedades*****       
        private int idProvincia;
        private string nombre;
        private int eliminado;
        public virtual int IdProvincia
        {
            get { return idProvincia;}
            set { idProvincia = value;}
        }
        public virtual string Nombre
        {
            get { return nombre;}
            set { nombre = value;}
        }
        public virtual int Eliminado
        {
            get { return eliminado; }
            set { eliminado = value; }
        }

    
//*****Referencias*****       
        private IList<Ciudad> listCiudades;
        public virtual IList<Ciudad> ListCiudades
        {
            get { return listCiudades; }
            set { listCiudades = value; }
        }
        public override bool Equals(object obj)
        {
            if (object.ReferenceEquals(this, obj)) return true;//el mismo obj de la misma session
            if (!(obj is Provincia)) return false;// si es de tipo Alarma
            Provincia that = (Provincia)obj;
            if (this.IdProvincia != that.IdProvincia) return false;//si tiene las mismas propiedades
            return true;                                  
        }
        public override int GetHashCode()
        {
            return IdProvincia.GetHashCode();
        }   
    }
}
 
 
 
 
CASE CIUDAD ------------------------------------------------------------------------
 
 
namespace ModeloDeDominioSSG.ModeloDeDominio
{
    public class Ciudad     {
//*****Propiedades*****       
        private int idCiudad;
        private string nombre;
        private int eliminado;
        public virtual int IdCiudad
        {
            get { return idCiudad;}
            set { idCiudad = value;}
        }
        public virtual string Nombre
        {
            get { return nombre;}
            set { nombre = value;}
        }
        public virtual int Eliminado
        {
            get { return eliminado; }
            set { eliminado = value; }
        }
//*****Referencias*****       
       
        private Provincia aProvincia;
 
        public virtual Provincia AProvincia
        {
            get { return aProvincia; }
            set { aProvincia = value; }
        } 
   
//*****Métodos*****ddd
    
        public override bool Equals(object obj)
        {
            if (object.ReferenceEquals(this, obj)) return true;//el mismo obj de la misma session
            if (!(obj is Ciudad)) return false;// si es de tipo Alarma
            Ciudad that = (Ciudad)obj;
            if (this.IdCiudad != that.IdCiudad) return false;//si tiene las mismas propiedades
            return true;                                  
        }
        public override int GetHashCode()
        {
            return IdCiudad.GetHashCode();
        }   
-------------------------------------------------------------
 
No encontré ( seguramente por impericia mia) informacion de ayuda acerca de esto que un novato ( muy novato ) como yo, pueda entender, si está por ahi se agradece mucho.
 
Mil gracias por tanta ayuda!, prometo que cuando aprenda ayudar como ustedes lo hicieron conmigo!, Si de esta forma no se adjunta el codigo disculpas,
 
 
saludos,
 
                  Nicolas.

--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---


Gmane