Gracias Diego...
Lo pude resolver cambiando el optimistic-lock...
Muchas gracias por tu ayuda.
Saludos
Diego

El día 24 de agosto de 2010 13:18, Diego Mijelshon
<[email protected]> escribió:
> Estás indicando optimistic-lock="dirty" en lugar de dejar el default, que es
> "version".
>
>     Diego
>
>
> 2010/8/24 Diego Perlman <[email protected]>
>>
>> Diego ahora lo pude agregar...
>>
>> Te incluyo la clase y el mapping...
>>
>> El tema es que cuando veo el SQL que genera NH no pregunta en el WHERE
>> por el campo VERSION...
>>
>> Mapping
>>
>> <?xml version="1.0" encoding="utf-8" ?>
>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="AC"
>> namespace="AC.Domain">
>>  <class name="Banco" table="bancos" optimistic-lock="dirty"
>>                         dynamic-update="true">
>>    <id name="Id" column="idBanco">
>>      <generator class="native" />
>>    </id>
>>    <version name="Version" column="Version" type="integer"
>> unsaved-value="0"></version>
>>    <property name="Nombre" column="nombre" type="System.String"
>> length="200" />
>>    <property name="Activo" column="activo" type="System.Int32" />
>>  </class>
>> </hibernate-mapping>
>>
>> Clase
>>
>> using System;
>>
>> namespace AC.Domain
>> {
>>    public class Banco
>>    {
>>        private Int32 _id;
>>        private String _nombre;
>>        private Int32 _activo;
>>        private Int32 _version;
>>
>>        public virtual Int32 Version
>>        {
>>            get { return _version; }
>>            set { _version = value; }
>>        }
>>
>>        public virtual Int32 Id
>>        {
>>            get { return _id; }
>>            set { _id = value; }
>>        }
>>
>>        public virtual String Nombre
>>        {
>>            get { return _nombre; }
>>            set { _nombre = value; }
>>        }
>>
>>        public virtual Int32 Activo
>>        {
>>            get { return _activo; }
>>            set { _activo = value; }
>>        }
>>
>>        public override bool Equals(object obj)
>>        {
>>            if (obj == null || !(obj is Banco))
>>                return false;
>>
>>            var banco = (Banco)obj;
>>
>>            return ((Nombre == null && banco.Nombre == null) ||
>> Nombre.Equals(banco.Nombre));
>>        }
>>
>>        public override int GetHashCode()
>>        {
>>            return string.Format("{0}", Nombre).GetHashCode();
>>        }
>>    }
>> }
>>
>>
>>
>>
>> El día 24 de agosto de 2010 12:17, Diego Mijelshon
>> <[email protected]> escribió:
>> > ¿Podrías incluir la clase y el xml?
>> >
>> >     Diego
>> >
>> >
>> > 2010/8/24 Diego Perlman <[email protected]>
>> >>
>> >> Diego intento poner el <version > en mi mapping y me tira error, como
>> >> que no lo reconoce.
>> >> Tenes idea que puede estar pasando. Estoy usando NH 2.1
>> >> Saludos
>> >>
>> >> El día 24 de agosto de 2010 12:00, Diego Mijelshon
>> >> <[email protected]> escribió:
>> >> > ¿Probaste agregar control _optimista_ de versiones?
>> >> >
>> >> >     Diego
>> >> >
>> >> >
>> >> > 2010/8/24 Diego <[email protected]>
>> >> >>
>> >> >> Buenas a todos antes que nada.
>> >> >> Les cuento que empece trabajar con NH hace unos 6 meses.
>> >> >> Y ahora que tengo la aplicacion corriendo con varios usuarios tengo
>> >> >> graves problemas con el tema de la concurrencia.
>> >> >> He leido el articulo de Ayende y el knol (creo que lo escribio
>> >> >> Fabio).
>> >> >> El tema es que pruebo hacer un Lock al momento de hacer un Upgrade y
>> >> >> no funciona.
>> >> >> Tambien probe hacer un Lockeo pesimista y tampoco funciona.
>> >> >> Me parece que no lo se implementar.
>> >> >> Quiero hacerlo funcionar sobre un objeto sencillo para despues
>> >> >> hacerlo
>> >> >> funcionar en los lugares criticos de la aplicacion.
>> >> >>
>> >> >> Lo que probe y no me funciona es lo siguiente:
>> >> >> public Object GetById(int bancoId)
>> >> >>        {
>> >> >>            using (ISession session = NHibernateHelper.OpenSession())
>> >> >>            using (ITransaction transaction =
>> >> >> session.BeginTransaction())
>> >> >>            {
>> >> >>                Banco tempBanco = session.Get<Banco>(bancoId);
>> >> >>                session.Lock(tempBanco, LockMode.Upgrade);
>> >> >>                transaction.Commit();
>> >> >>                return tempBanco;
>> >> >>            }
>> >> >>
>> >> >>        }
>> >> >>
>> >> >> Ahora 2 usuarios levantan el mismo objeto Banco lo modifican y a
>> >> >> ninguno le tira el ObjectStaleException.
>> >> >>
>> >> >> Alguien me puede decir que estoy haciendo mal y orientarme para ver
>> >> >> como lo arreglo??
>> >> >> Saludos
>> >> >> Diego
>> >> >>
>> >> >> --
>> >> >> Para escribir al Grupo, hágalo a esta dirección:
>> >> >> [email protected]
>> >> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >> >
>> >> > --
>> >> > Para escribir al Grupo, hágalo a esta dirección:
>> >> > [email protected]
>> >> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>
>> >> --
>> >> Para escribir al Grupo, hágalo a esta dirección:
>> >> [email protected]
>> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >
>> > --
>> > Para escribir al Grupo, hágalo a esta dirección:
>> > [email protected]
>> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano

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