Si no es una entidad no tiene un identificador... pasaria ser un value object

--------------------------------------------------------------------------------

rdi2k | Ezequiel Jadib | MSN: [EMAIL PROTECTED] | Blogs: 
http://geeks.ms/blogs/ejadib/ (ES) - ejadib.wordpress.com (EN) 
  ----- Original Message ----- 
  From: Chili 
  To: NHibernate-Hispano 
  Sent: Friday, February 09, 2007 4:09 PM
  Subject: [NHibernate-Hispano] Activar identity en un composite-element



  Hola de nuevo,

  Estoy trabajando sobre el mismo código de los últimos días. Tenga una
  nueva duda, que surge a raíz de intentar salvar un nuevo objeto de una
  colección de composite-element.

  Es decir, tengo una clase MemberData, que tiene una colección de
  objetos Postal (direcciones postales). Postal no lo considero como una
  entidad, y lo he mapeado como un bag de composite-element. El problema
  es que entonces, no sé cómo especificar que la clave primaria de esa
  tabla tenga como generator class identity.

  Mis clases son éstas:

      public class MemberData
      {
          private int idPersonales;
          private string name, surname, place, urlPhoto, urlPage;
          private DateTime date;
          private IList<Email> emails;
          private IList<Telephone> telephones;
          private IList<Postal> postals;
          private IList<Ident> idents;
  }

      public class Postal: IEquatable<Postal>
      {
          private int idPostal, number;
          private string name, flat, postalcode, city, place, country;
          private string wayKind;
  }


  Y los mappings...

  <?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>
      <property name="Name" column="name" type="String"/>
      <property name="Surname" column="surname" type="String"/>
      <property name="Place" column="place" type="String"/>
      <property name="UrlPhoto" column="urlphoto" type="String"/>
      <property name="UrlPage" column="urlpage" type="String"/>
      <property name="Date" column="date"/>
      <bag name="Postals" table="postal">
        <key column="idpersonales" />
        <composite-element
  class="dataAccess.csfiles.datospersonalesygrupo.Postal, dataAccess">
          <property name="IdPostal" column="idpostal" type="Int32"/>
          <property name="Name" column="name" type="String"/>
          <property name="Number" column="number" type="Int32"/>
          <property name="Flat" column="flat" type="String"/>
          <property name="PostalCode" column="postalcode" type="String"/
  >
          <property name="City" column="city" type="String"/>
          <property name="Place" column="place" type="String"/>
          <property name="Country" column="country" type="String"/>
          <property name="WayKind" column="waykind" type="String"/>
        </composite-element>
      </bag>

  Al realizar el session.Save(MemberData member) me da el siguiente
  error:

  Cannot insert explicit value for identity column in table 'postal'
  when IDENTITY_INSERT is set to OFF.


  Stack Trace:

  [SqlException (0x80131904): Cannot insert explicit value for identity
  column in table 'postal' when IDENTITY_INSERT is set to OFF.]
     System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
  Boolean breakConnection) +177
     System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
  exception, Boolean breakConnection) +68
   
  System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
  stateObj) +199
     System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,
  SqlCommand cmdHandler, SqlDataReader dataStream,
  BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
  stateObj) +2300
     System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader
  ds, RunBehavior runBehavior, String resetOptionsString) +147
   
  System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
  cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
  async) +1021
     System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
  cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
  method, DbAsyncResult result) +314
   
  System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
  result, String methodName, Boolean sendToPipe) +413
     System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +115
     NHibernate.Impl.BatcherImpl.ExecuteNonQuery(IDbCommand cmd) in c:
  \net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Impl
  \BatcherImpl.cs:172
     NHibernate.Impl.NonBatchingBatcher.AddToBatch(IExpectation
  expectation) in c:\net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate
  \Impl\NonBatchingBatcher.cs:36
   
  
NHibernate.Persister.Collection.AbstractCollectionPersister.Recreate(IPersistentCollection
  collection, Object id, ISessionImplementor session) in c:\net
  \nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Persister\Collection
  \AbstractCollectionPersister.cs:832

  [ADOException: could not insert collection:
  [dataAccess.csfiles.datospersonalesygrupo.MemberData.Postals#1]]
     dataAccess.csfiles.DBManager.save(Object obj) in C:\Documents and
  Settings\César Díaz García\Mis documentos\Visual Studio 2005\Projects
  \dataAccess\dataAccess\csfiles\DBManager.cs:177
     Controlador.save(Object obj) in c:\Documents and Settings\César
  Díaz García\Mis documentos\Visual Studio 2005\WebSites\proyecto
  \App_Code\Controlador.cs:80
     web_privado_perfil_modificar.ButtonGuardar_Click(Object sender,
  EventArgs e) in c:\Documents and Settings\César Díaz García\Mis
  documentos\Visual Studio 2005\WebSites\proyecto\web\privado
  \perfil_modificar.aspx.cs:61
     System.Web.UI.WebControls.Button.OnClick(EventArgs e) +75
     System.Web.UI.WebControls.Button.RaisePostBackEvent(String
  eventArgument) +97
   
  
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
  eventArgument) +7
     System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
  sourceControl, String eventArgument) +11
     System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  +33
     System.Web.UI.Page.ProcessRequestMain(Boolean
  includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  +4880


  La columna idpostal de la tabla postal tiene activada la
  especificación de identidad. Sospecho que el error es que falta lo del
  identity en el mapping, pero no estoy seguro.

  Alguien sabe a qué se debe?

  Saludos!


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