ernestmartin | 1 Jul 14:05

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)

JoseFR | 26 Jun 20:14

Proxy Interceptor para entidades


Estaba buscando la forma de inyectar un IInterceptor (el de
dynamicproxy no el de nhibernate) y que todas mis entidades (o las que
el container pudiera resolver) fueran interceptadas por este tío.
Y si bien no hay algo escrito, me acordé de este post:
  http://fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html
La finalidad es un logging de entidades de negocio. (no es un logging
relacionado a la persistencia).

Y después me surgió otra duda respecto a la interfaz
INotifyPropertyChanged, de system.componentmodel usada en WPF al
bindear controles a entidades, y me parece que sería en principio
posible, en el ReflectionOptimizer crear un proxy que implemente esa
interfaz y además que notifique ante el cambio de una propiedad
mediante otro Interceptor.

En fin, creo que ese post puede tener varias "utilidades" ocultas y
quería compartirlo.
--~--~---------~--~----~------------~-------~--~----~
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 | 26 Jun 04:14

consulta sobre performance en primeras consultas

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

SEBA | 25 Jun 17:08
Favicon

Colección Vacía (Empty)


Hola. Les comento mi problema.

Tengo la siguiente clase:

public class ListaPrecios
    {
	...
	private IList<ListaPreciosItem> _items = new List<ListaPreciosItem>
();
	...
	public virtual IList<ListaPreciosItem> Items
        {
            get
            {
                return _items;
            }
            set { _items = value; }
        }
	...
}

El mapping:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="SHGestionBO" namespace="SHGestionBO.Class" default-access
="nosetter.camelcase-underscore">
  <class name="ListaPrecios" table="ListaPrecios" lazy="false" dynamic-
update="true" optimistic-lock="all">
    <id name="NroLista" column="nro_lista" type ="int" >
      <generator class="assigned" />
    </id>
	...
    <bag name="Items" table="ListaPreciosItem"  inverse ="true"
cascade="all-delete-orphan" lazy="true" >
      <key column="nro_lista" />
      <one-to-many class="ListaPreciosItem" />
    </bag>
	...
  </class>
</hibernate-mapping>

En la capa de presentacion (WinForm) enlazo a una grilla el List
devuelto:

this.listaPreciosItemBindingSource.DataSource =
this.currentListaPrecios().Items;
//this.currentListaPrecios() devuelve un obj ListaPrecios

Al hacer debug de la linea anterior en el Visual Studio:
- Si creo un new Obj ListaPrecios, el value en el debug de
"this.currentListaPrecios().Items" me devuelve "Count = 0". PERFECTO.
Desde la grilla
puedo agregar nuevos obj ListaPreciosItem sin problemas.

-  al RECUPERAR un Obj ListaPrecios con un metodo Repositorio.getById
(), el value en el debug de "this.currentListaPrecios().Items" me
devuelve "{}" en lugar de "Count = 0".
Y al querer editar la grilla me devuelve el siguiente error:

System.ArgumentException was unhandled
  Message="El valor \"System.Object\" no es del tipo
\"SHGestionBO.Class.ListaPreciosItem\" y no se puede utilizar en esta
colección genérica.\r\nNombre del parámetro: value"
  Source="mscorlib"
  ParamName="value"
  StackTrace:
       en System.ThrowHelper.ThrowWrongValueTypeArgumentException
(Object value, Type targetType)
       en System.Collections.Generic.List`1.VerifyValueType(Object
value)
       en
System.Collections.Generic.List`1.System.Collections.IList.Add(Object
item)
       en NHibernate.Collection.PersistentBag.Add(Object value) en c:
\CSharp\NH\nhibernate\src\NHibernate\Collection\PersistentBag.cs:línea
379
       en System.Windows.Forms.BindingSource.Add(Object value)
       en System.Windows.Forms.BindingSource.AddNew()
       en System.Windows.Forms.CurrencyManager.AddNew()
       en
System.Windows.Forms.DataGridView.DataGridViewDataConnection.AddNew()
       en
System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnNewRowNeeded
()
       en System.Windows.Forms.DataGridView.OnRowEnter
(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32
rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred)
       en System.Windows.Forms.DataGridView.SetCurrentCellAddressCore
(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress,
Boolean validateCurrentCell, Boolean throughMouseClick)
       en System.Windows.Forms.DataGridView.OnCellMouseDown
(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
       en System.Windows.Forms.DataGridView.OnCellMouseDown
(DataGridViewCellMouseEventArgs e)
       en System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs
e)
       en System.Windows.Forms.Control.WmMouseDown(Message& m,
MouseButtons button, Int32 clicks)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.DataGridView.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage
(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc
(Message& m)
       en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW
(MSG& msg)
       en
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop
(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       en
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner
(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop
(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.Run(Form mainForm)
       en SHGestionPresentacion.Program.Main() en C:\Documents and
Settings\shidalgo\Mis documentos\Visual Studio 2008\Projects\SHGestion
\SHGestionPresentacion\Program.cs:línea 29
       en System.AppDomain._nExecuteAssembly(Assembly assembly, String
[] args)
       en System.AppDomain.ExecuteAssembly(String assemblyFile,
Evidence assemblySecurity, String[] args)
       en
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       en System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
       en System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
       en System.Threading.ThreadHelper.ThreadStart()
  InnerException:

El "{}" pense q era un null por lo q modifique el GET de la propiedad
para q si _items es null devuelva new List<ListaPreciosItem>().

Quería saber si hay alguna forma para q Nhibernate devuelva "Count =
0" (new List<ListaPreciosItem>()) y no un "{}".

Estoy utilizando NHibernate-2.1.0.Beta2.

Gracias.

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

Lucas | 25 Jun 16:26

Duda y mareo sobre Mapeo NHIbernate


Explico mi problema del cual he leido sobre el famoso bug de
NHibernate + Sql server

Comienzo.
Aplicacion web asp.net

Archivos de Mapeo: Todas como recurso incrustado (embbed resource)
Clientes.hbm.xml
Usuarios.hbm.xml
Proyectos.hbm.xml
Tareas.hbm.xml

Clases:
Usuarios.cs
UsuarioService.cs
Tareas.cs
TareasService.cs
Proyectos.cs
ProyectosService.cs

Sucede lo siguiente.

La clase UsuarioService.cs es la encargada de añadir usuarios a una
tabla con la siguiente funcion.

Tambien la clase tiene una relacion de uno a muchos con la tabla
Tareas.

Funcion de agregado de usuario:
        public static void AnadirUsuario(Usuarios usuario)
        {
            using (NHibernate.ISession NHSession =
SessionFactory.GetNewSession())
            {
                using (NHibernate.ITransaction ts =
NHSession.BeginTransaction())
                {
                    NHSession.Save(usuario);
                    ts.Commit();
                }
            }

La clase USUARIOS.CS

public class Usuarios
    {
        private long id;
        private string nombre;
        private string rol;
        private string clave;
        private IList<Tareas> tareas;

        public Usuarios()
        {
            tareas = new List<Tareas>();
        }

        public virtual IList<Tareas> TareasList
        {
            get { return tareas; }
            set { tareas = value; }
        }

        public virtual long IdUsuario
        {
             get { return id; }
             set { id = value; }
        }

        public virtual string Nombre
        {
             get { return nombre; }
             set { nombre = value; }
        }

        public virtual string Clave
        {
             get { return clave; }
             set { clave = value; }
        }

        public virtual string Rol
        {
             get { return rol; }
             set { rol = value; }
        }
    }

Mapeo Usuarios.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="PAModelo" namespace="PAModelo">

  <class name="Usuarios" table="Usuarios">
    <id name="IdUsuario" type="long" unsaved-value="0">
      <generator class="identity"/>
    </id>
    <property name="Clave" type="String" not-null="true"/>
    <property name="Nombre" type="String" not-null="true"/>
    <property name="Rol" type="String" not-null="true" />

    <bag name="TareasList" cascade="all-delete-orphan">
      <key column="IdUsuario" />
      <one-to-many class="Tareas" />
    </bag>
  </class>
</hibernate-mapping>

Aclaro que el generator class es IDENTITY y funciona sin problemas.

La cuestion es la siguiente, tengo otra tabla que Agrega Clientes y
tiene la misma relacion que tiene Usuario con Tareas pero Clientes la
tiene con otra tabla que se llama Proyectos.

Aqui la clase cliente.

public class Clientes
    {
        private long id;
        private string nombre;
        private string descripcion;
        private IList<Proyectos> proyectos;

        public Clientes()
        {
            proyectos = new List<Proyectos>();
        }

        public virtual IList<Proyectos> ProyectosList
        {
            get { return proyectos; }
            set { proyectos = value; }
        }

        public virtual long IdCliente
        {
             get { return id; }
             set { id = value; }
        }

        public virtual string Descripcion
        {
             get { return descripcion; }
             set { descripcion = value; }
        }

        public virtual string NombreCliente
        {
            get { return nombre; }
            set { nombre = value; }
        }
    }

Aqui su Archivo de Mapeo.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="PAModelo" namespace="PAModelo">
  <class name="Clientes" table="Clientes">
    <id name="IdCliente" type="long" unsaved-value="0">
      <generator class="identity"/>
    </id>
    <property name="Descripcion" type="String" not-null="true"/>
    <property name="NombreCliente" type="String" not-null="true"/>

    <bag name="ProyectosList" cascade="all-delete-orphan">
      <key column="IdCliente" />
      <one-to-many class="Proyectos" />
    </bag>

  </class>
</hibernate-mapping>

y Aqui viene lo gracioso, ocurre el problema de Identity_scope() al
momento de agregar usuarios.

        public static void AñadirCliente(Clientes cliente)
        {
            using (NHibernate.ISession NHSession =
SessionFactory.GetNewSession())
            {
                using (NHibernate.ITransaction ts =
NHSession.BeginTransaction())
                {
                    NHSession.Save(cliente);
                    ts.Commit();
                }
            }
        }

Ahora bien, porque Funciona perfectamente con la clase usuario y
usuarioservice pero con Cliente y ClienteService no funciona?

Otro dato mas, a la hora de realizar esta funcion para usuarios:

                NHibernate.ICriteria qry = NHSession.CreateCriteria
(typeof(Usuarios));
                usuarios = qry.List<Usuarios>();

Funciona perfecto.

pero con la de cliente

                NHibernate.ICriteria qry = NHSession.CreateCriteria
(typeof(Clientes));
                clientes = qry.List<Clientes>();

No funciona?

Adjunto tambien los archivos de mapeos de Proyectos y Tareas.

Proyecto.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="PAModelo" namespace="PAModelo">
  <class name="Proyectos" table="Proyectos">
    <id name="IdProyecto" type="long" unsaved-value="0">
      <generator class="identity"/>
    </id>

    <property name="Descripcion" type="String" not-null="true"/>

    <many-to-one name="Clientes" column="IdCliente" cascade="all"/>

    <bag name="TareasList" cascade="all-delete-orphan">
      <key column="IdProyecto"/>
      <one-to-many class="Tareas"/>
    </bag>

  </class>
</hibernate-mapping>

Tareas.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="PAModelo" namespace="PAModelo">
  <class name="Tareas" table="Tareas">
    <id name="IdTareas" type="long" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="TipoTarea" type="String" not-null="true"/>
    <property name="Actividades" type="String" not-null="true"/>

    <many-to-one name="Usuarios" column="IdUsuario" cascade="all"/>

    <many-to-one name="Proyectos" column="IdProyecto" cascade="all"/>
  </class>
</hibernate-mapping>

Muchisimas gracias por responder, este tema me esta volviendo loco!

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

Gonzalo Brusella | 25 Jun 16:43

Crear mappings en base al Schema existente de una DB

Alguien conoce una herramienta que haga lo que dice el subject?


Gonzalo A. Brusella
gonzalo <at> brusella.com.ar
http://www.brusella.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
-~----------~----~----~----~------~----~------~--~---

Gonzalo Brusella | 25 Jun 15:17

Consulta de Mapeo


Tengo una duda respecto de como realizar un mapeo de forma mas o menos coherente.
Basicamente tengo un mapeo de herencia usando la estrategia de table-per-subclass.
Ahora bien. El problema es que los tipos de subclass son n (se levantan por reflection)... mi pregunta es... como hago para agragar dinamicamente el mapeo de la subclass.

Supongamos que mi mapping es (ejemplo del manual):

<class name="IPayment" table="PAYMENT">
<id name="Id" type="Int64" column="PAYMENT_ID">
<generator class="native"/>
</id>
<property name="Amount" column="AMOUNT"/>
...
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
</class>


Básicamente ¿se puede agregar el tipo
<joined-subclass name="CandyPayment" table="CANDY_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>

on-demand? Si es así... ¿como?

Muchas Gracias!

Gonzalo A. Brusella
gonzalo <at> brusella.com.ar
http://www.brusella.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
-~----------~----~----~----~------~----~------~--~---

Raul Lopez | 24 Jun 17:45

Ejemplo NHibernate.Burrow


Hola, estoy viendo de incorporar burrow a un proyecto web y me baje los
ejemplos. Al probar el mas basico (el que usa solo el core y no los daos
de burrow) veo que no me hace las modificaciones (Update customer).
Supongo que tengo algo mal configurado pero no me doy cuenta que puede
ser.

Los test dan todo en verde. Lo unico que cambie fue copiar
hibernate.cfg.xml desde BasicSample.Test a BasicSample.Web y modifique
la referencia correspondiente en el web.config a:
nh-config-file="~\hibernate.cfg.xml" y le agregue la referencia a
NHibernate en su propia carpeta Solution Items (El proyecto Data no
tenia la referencia)

Hace la navegacion de los customers, trae el registro para editarlo pero
al hacer un cambio, este no queda registrado. Es como si no hiciera el
commit. 

Cualquie sugerencia es bienvenida.

Saludos,
Raul.

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

Matias Nill | 22 Jun 18:44

Mala Performance en first hit


Gente, como están? tengo una consulta para ustedes a ver quien me
puede dar una mano con esto.. estoy usando NHibernate junto con
spring.net y el tiempo de las aplicaciones la primera vez que accedes
se elevo mucho, según el dotTrace esta demorando mucho tiempo en
levantar el contexto, leer los xml de mappings, crear y guardar en
cache los singletons etc, pense en sacar los xml y hacer el mapping
con attibutos para al menos sacar el tiempo de acceso a disco, alguien
tiene alguna otra idea?, saben porque puede ser que este tardando
mucho en arrancar?.. es obvio que la primera vez tiene que compilar
las paginas y levantar el contexto pero 27 seg. para unas 35 clases
mapeadas se me hace mucho :S alguna manito???

salute y gracias

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

matiasnill | 22 Jun 17:06

Mala Performance en first hit


Hola Gente, como están? tengo una consulta para ustedes a ver quien me
puede dar una mano con esto.. estoy usando NHibernate junto con
spring.net y el tiempo de las aplicaciones la primera vez que accedes
se elevo mucho, según el dotTrace esta demorando mucho tiempo en
levantar el contexto, leer los xml de mappings, crear y guardar en
cache los singletons etc, pense en sacar los xml y hacer el mapping
con attibutos para al menos sacar el tiempo de acceso a disco, alguien
tiene alguna otra idea?, saben porque puede ser que este tardando
mucho en arrancar?.. es obvio que la primera vez tiene que compilar
las paginas y levantar el contexto pero 27 seg. para unas 35 clases
mapeadas se me hace mucho :S alguna manito???

salute y gracias
Matias Nill

--~--~---------~--~----~------------~-------~--~----~
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 Lopez | 19 Jun 20:37

Transportar data en pendrive


Hola, tengo que migrar una pequeña aplicacion monousuario (actualmente
en Delphi con dbfs) y es requerimiento que se pueda mover la data en un
pendrive. Se que no es buena practica pero no es negociable. 
Vi que se puede hacer con sqlite y tambien con firebird embedded. 
No tengo experiencia en ninguno de los dos casos, por lo que agradezco
si me pueden aportar alguna sugerencia.

Saludos,
Raul.

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