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