Hola que tal, yo nuevamente Bueno Nestor, pude solucionar el problema, revise la documentacion de los puntos 5.1.4.6 y 7.4 que me mencionaste y me ayudo mucho. Muchas gracias por la ayuda :D
Ahora cuento la historia por si a alguien le da el mismo problema. Revise el archivo nhibernate-mapping.xsd de nhibernate, busque la parte de composite-id especificamente el unsaved-value, este segun el archivo me permite colocar dos valores, (none o any), con ambos probe, compile el hibernate una vez hecho el cambio y aun con el (SaveorUpdate) me mandaba a actualizar en vez de guardar. Tambien probe la opción de colocar en la estructura con id compuesto el campo <version name="LastModifiedOn" column="LastModifiedOn" type="timestamp" />, en este caso si me mando a guardar en vez de actualizar, pero no me gustaba la idea de agregar ese campo "LastModifiedOn" a mi tabla, ademas que me daba otro error de fuera de indices :S "Index was out of range. Must be non-negative and less than the size of the collection." al momento de Entonces continue la busqueda y encontre un ejemplo en el grupo con esta opción: http://groups.google.com.ar/group/nhibernate-hispano/browse_thread/thread/20171bd616889cc6/ff5ca6272c472e6c?lnk=gst&q=composite-id+guillermo#ff5ca6272c472e6c Con lo cual pude cambiar mi estructura a como indica Guillermo en el ejemplo "TestConn.zip" y me quedo asi: Clase: TipoListado <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="PDVSA.Negocio.Entidades.Base" assembly="Entidades.Base" default-lazy="true"> <meta attribute="extends">PDVSA.Business.Entities.Core.AbstractEntity</meta> <meta attribute="extends- composite">PDVSA.Business.Entities.Core.CompositeID</meta> <meta attribute="generate-typeconverter"></meta> <class name="PDVSA.Negocio.Entidades.Base.TipoListado, Entidades.Base" table="T_TipoListado"> <composite-id unsaved-value="any"> <key-property name="PK_CodigoTipoListado" column="PK_CodigoTipoListado" type="Int64" /> <key-property name="PK_CodigoListado" column="PK_CodigoListado" type="Int64" /> </composite-id> <property name="DescripcionTipoListado" column="DescripcionTipoListado" type="String" length="100"> <meta attribute="field-browsable">true</meta> <meta attribute="field-readonly">false</meta> <meta attribute="field-category">GeneralCategory</meta> <meta attribute="field-propertysort">3</meta> </property> </class> </hibernate-mapping> ------------------------------------- Clase: Listado <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="PDVSA.Negocio.Entidades.Base" assembly="Entidades.Base" default-lazy="true"> <class name="PDVSA.Negocio.Entidades.Base.Listado" table="T_Listado"> <meta attribute="extends">PDVSA.Business.Entities.Core.AbstractEntity</meta> <meta attribute="default-property-tostring">DescripcionListado</ meta> <meta attribute ="generate-typeconverter"></meta> <id name="ID" column="PK_CodigoListado" type="Int64" unsaved- value="0"> <meta attribute="field-browsable">false</meta> <meta attribute="field-readonly">true</meta> <meta attribute="field-category">GeneralCategory</meta> <meta attribute="field-propertysort">1</meta> <generator class="sequence"> <param name="sequence">T_Listado_PK_CodigoListado_seq</param> </generator> </id> <property name="DescripcionListado" column="DescripcionListado" type="String" length="100"> <meta attribute="field-browsable">true</meta> <meta attribute="field-readonly">false</meta> <meta attribute="field-category">GeneralCategory</meta> <meta attribute="field-propertysort">2</meta> </property> <bag name="TipoListados" table="T_TipoListado" inverse="true"> <key foreign-key="PK_CodigoListado" column="PK_CodigoListado"/ > <one-to-many class="PDVSA.Negocio.Entidades.Base.TipoListado, Entidades.Base" /> </bag> </class> </hibernate-mapping> Teniendo en cuenta unsaved-value="any" en el composite-id de la clase TipoListado Genere la base de datos e inclui algunos datos en T_Listado Hice una prueba de inserción bastante simple y funciono: // PRUEBA SIMPLE PARA AGREGAR AL COMPOSITE-ID Listado clsListado = sessionContext.GetById<Listado>((long)1); TipoListado clsTipoListado = new TipoListado(); clsTipoListado.PK_CodigoListado = clsListado.ID; clsTipoListado.PK_CodigoTipoListado = 63; clsTipoListado.DescripcionTipoListado = "prueba"; sessionContext.SaveOrUpdate<TipoListado>(clsTipoListado); Claramente para insertar un valor nuevo, lo ideal es verificar primero que el registro no exista en la tabla de la base de datos, pues en este caso se haria una actualización en vez de una inserción. Gracias por la ayuda :) -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
