Bien Fabio, probé con lo que me dijiste, pero no funciona, sigo con el
mismo error.

Aquí están mis nuevos mapping:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-
lazy="false">
  <class name="dataAccess.csfiles.datospersonalesygrupo.IdentName,
dataAccess" table="identname">
    <id name="IdName" column="idname" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Name" column="name" type="String"/>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-
lazy="false">
  <class name="dataAccess.csfiles.datospersonalesygrupo.MemberData,
dataAccess" table="datospersonales">
    <id name="IdPersonales" column="idpersonales" type="Int32">
      <generator class="identity" />
    </id>
    <bag name="Idents" table="idents">
      <key column="idpersonales" />
      <composite-element
class="dataAccess.csfiles.datospersonalesygrupo.Ident, dataAccess">
        <property name="Number" column="number" type="String"/>
        <property name="Place" column="place" type="String"/>
        <property name="Date" column="date"/>
        <many-to-one name="Name" cascade="save-update"
          class="dataAccess.csfiles.datospersonalesygrupo.IdentName,
dataAccess"
          column="idname"/>
      </composite-element>
    </bag>
  </class>
</hibernate-mapping>


Aquí lo salvo:

        public void saveIdentName(IdentName identName) {
            if (!session.IsConnected)
                session.Reconnect();

            ITransaction transaction = null;

            try
            {
                transaction = session.BeginTransaction();
                session.SaveOrUpdate(identName);
                transaction.Commit();
                session.Disconnect();
            }
            catch (Exception e)
            {
                transaction.Rollback();
                session.Disconnect();
                throw e;
            }
        }


Y aquí construyo el objeto:

            IdentName identName = new IdentName();
            identName.Name = (string)r["Documento"];
            Controlador.Instance.saveIdentName(identName);

Esto me tiene totalmente desconcertado. ¿Qué hago?


On 5 feb, 16:45, Fabio Maulo <[EMAIL PROTECTED]> wrote:
> Chili escribió:> Extraído de la documentación de referencia de NHibernate:
>
> >> For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), 
> >> you may use identity key generation. For databases that support sequences 
> >> >(DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use sequence 
> >> style key generation. Both these strategies require two SQL queries to 
> >> insert a >new object.
>
> > A qué dos instrucciones SQL  para la inserción se refiere?
>
> Se refiere a que NH genera dos SQL; la primera para conocer el Id y la
> segunda para el INSERT de nuevo record.
> No te falta nada.
> Tal vez hay algo demás.
> 1) saca el usaved-value
> 2) No hagas absolutamente nada con el Id (no lo asignes); deja que se
> ocupe NH de hacer lo que corresponde. Si necesitas conocer el Id es
> suficiente que lea la propiedad despues del Save.
>
> Una aclaración:
> El metodo SaveOrUpdate usa el valor del Id para saber si la instancia es
> nueva o tiene que ser actualizada; vos no te preocupes que NH lo hace
> bien y lo hace solo (ya que estas usando Id y no claves compuestas).
>
> Chau.
> Fabio.


--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups-beta.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Responder a