Con composite-id el saveorupdate no funciona.

On 2/1/07, Chili <[EMAIL PROTECTED]> wrote:
>
> Bien, parece que tengo más problemas. Una vez asumido que tenía que
> hacer un delete del email antes de hacer el SaveOrUpdate de la clase
> padre, me encuentro con que no he avanzado nada y sigo donde estaba,
> esto es, con el mismo error.
>
> Hago el delete satisfactoriamente, me borra la fila de la tabla
> correspondiente de la base de datos, pero en el momento que intento
> actualizar el member (clase padre), el error que salta es el mismo.
>
> Por si alguien no lo recordaba:
>
>  Cannot insert the value NULL into column 'idpersonales', table
> 'curriculum.dbo.email'; column does not allow nulls. UPDATE fails.
> The statement has been terminated.
> Description: An unhandled exception occurred during the execution of
> the current web request. Please review the stack trace for more
> information about the error and where it originated in the code.
>
> Exception Details: System.Data.SqlClient.SqlException: Cannot insert
> the value NULL into column 'idpersonales', table
> 'curriculum.dbo.email'; column does not allow nulls. UPDATE fails.
> The statement has been terminated.
> Stack Trace:
>
> [SqlException (0x80131904): Cannot insert the value NULL into column
> 'idpersonales', table 'curriculum.dbo.email'; column does not allow
> nulls. UPDATE fails.
> The statement has been terminated.]
>    System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
> Boolean breakConnection) +95
>    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
> exception, Boolean breakConnection) +82
>
> System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
> stateObj) +346
>    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,
> SqlCommand cmdHandler, SqlDataReader dataStream,
> BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
> stateObj) +3244
>    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader
> ds, RunBehavior runBehavior, String resetOptionsString) +186
>
> System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
> cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
> async) +1121
>    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
> cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
> method, DbAsyncResult result) +334
>
> System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
> result, String methodName, Boolean sendToPipe) +407
>    System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +149
>    NHibernate.Impl.BatcherImpl.ExecuteNonQuery(IDbCommand cmd) in c:
> \net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Impl
> \BatcherImpl.cs:172
>
> NHibernate.Persister.Collection.AbstractCollectionPersister.DeleteRows(IPersistentCollection
> collection, Object id, ISessionImplementor session) in c:\net
> \nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Persister\Collection
> \AbstractCollectionPersister.cs:947
>
> [ADOException: could not delete collection rows:
> [dataAccess.csfiles.datospersonalesygrupo.DatosPersonalesDA.Emails#1]]
>    dataAccess.csfiles.DBManager.saveMember(MemberDA member) in C:
> \Documents and Settings\César Díaz García\Mis documentos\Visual Studio
> 2005\Projects\dataAccess\dataAccess\DBManager.cs:97
>    Controlador.saveMember(MemberDA member) in c:\Documents and Settings
> \César Díaz García\Mis documentos\Visual Studio 2005\WebSites\proyecto
> \App_Code\Controlador.cs:58
>    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:50
>    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +96
>    System.Web.UI.WebControls.Button.RaisePostBackEvent(String
> eventArgument) +116
>
> System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
> eventArgument) +31
>    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
> sourceControl, String eventArgument) +32
>    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
> +72
>    System.Web.UI.Page.ProcessRequestMain(Boolean
> includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
> +3834
>
>
> Alguna sugerencia más? Podría plantearme eliminar el composite-id de
> esa tabla (ya que es el único que tengo en todo mi esquema de base de
> datos), pero creo que estaría violando las normas morales que todo
> programador deberíamos tener xDDDDD.
>
> Si los de NHibernate pusieron composites, será que pueden utilizarse
> sin que den tantos quebraderos de cabeza, no? O no? :SSSSSSSSSSS.
>
> On 1 feb, 00:50, "Francisco A. Lozano" <[EMAIL PROTECTED]> wrote:
> > Los composite-IDs en Java van perfeCTos... En .NET los pretendo usar
> > en el próximo proyecto... a no ser que realmente den problemas...
> > alguno tiene más info al respecto?
> >
> > El 31/01/07, Dario Quintana<[EMAIL PROTECTED]> escribió:
> >
> >
> >
> > > Uuuuuuuuh !! perdón ! No me dí cuenta que era composite !!! Sorry jeje.
> >
> > > Bueno amigo, creo q estás solo entonces.
> > > Nunca trabajo por compuestas, por ese mismo motivo, y tampoco ví
> > > alguien que lo haga, o sino es muy timido :)
> >
> > > En todo este tiempo de usar NHibernate arribé a que con:
> >
> > > -composite-id
> > > -remoting
> > > -webservices
> >
> > > ...no es soplar y hacer botellas, te va a doler un poco la cabeza con
> > > estos (mi opinión y expiencia personal).
> >
> > > Conclusión:
> >
> > > Hacé lo que te decían: Vas a tener que borrar primero el Hijo (pero
> > > borrarlo con Delete).
> >
> > > On 1/31/07, Chili <[EMAIL PROTECTED]> wrote:
> >
> > > > La tabla Email (hija) tiene una FK a la tabla DatosPersonales, pero no
> > > > puede ser null, pues forma parte de la clave primaria de la propia
> > > > tabla Email. Es decir, mi tabla Email es así:
> >
> > > > ---------------------------------------
> > > > |         Email                    |
> > > > --------------------------------------
> > > > | PK(email, idpersonales)  |
> > > > | FK(idpersonales)            |
> > > > ---------------------------------------
> >
> > > > idpersonales es clave primaria de la tabla DatosPersonales. Por tanto,
> > > > no puede ser NULL. Esto quiere decir que tengo que hacer el delete
> > > > individual del Email ya que la actualización de DatosPersonales
> > > > necesita que las foreign keys puedan ser NULL para borrar los objetos
> > > > perdidos?
> >
> > > > On 31 ene, 20:10, "Dario Quintana" <[EMAIL PROTECTED]>
> > > > wrote:
> > > > > Si, ningun problema:
> >
> > > > >  public int Guardar(ActividadPlan entity)
> > > > >         {
> > > > >             if (IsValid(entity, Validate.Entity))
> > > > >             {
> > > > >                 try
> > > > >                 {
> > > > >                     _ActividadPlanData.BeginTransaction();
> > > > >                     _ActividadPlanData.SaveOrUpdateObject(entity);
> > > > >                     _ActividadPlanData.CommitTransaction();
> > > > >                 }
> > > > >                 catch (Exception ex)
> > > > >                 {
> > > > >                     _ActividadPlanData.RollBackTransaction();
> > > > >                     throw ex;
> > > > >                 }
> > > > >             }
> > > > >             return entity.IdActividadPlan;
> > > > >         }
> >
> > > > > Tambien adjunto la capa de abajo: ActividadPlanData, y referencia de
> > > > > más abajo: BaseRepository, para que veas todo el camino. Y no hay nada
> > > > > de distinto en lo que vos queres hacer.
> > > > > Te fijaste si la columna de la tabla hija (en la FK) acepta null ?
> > > > > Controlá nuevamente los mapping, como yo lo hice, funcionó.
> >
> > > > > On 1/31/07, Chili <[EMAIL PROTECTED]> wrote:
> >
> > > > > > He estado mirando tu código, y básicamente es a lo que yo me 
> > > > > > refería.
> > > > > > Borras un elemento de tu colección, y a continuación salvas tu clase
> > > > > > padre (la actualizas) y el nhibernate se ocupa de todo. He visto 
> > > > > > algo
> > > > > > en un mapping que no sé para qué sirve, a ver si me lo podrías
> > > > > > explicar: unsaved-value="0".
> >
> > > > > > Como no sé lo que estoy haciendo mal, ¿podrías pegar aquí tu método
> > > > > > Guardar de ActividadPlanBL?
> >
> > > > > > Saludos!
> >
> > > > > > On 31 ene, 01:29, "Dario Quintana" <[EMAIL PROTECTED]>
> > > > > > wrote:
> > > > > > > Adjunto un pedazo de codigo, explico algo del codigo:
> >
> > > > > > > Son 2 entidades:
> >
> > > > > > > -ActividadPlan (padre)
> > > > > > > -LaborActividadPlan (hija)
> >
> > > > > > > tambien mando un ejemplo de form con la funcionalidad, para que 
> > > > > > > vean
> > > > > > > algo del código:
> >
> > > > > > > - frmLaboresPorActividad.cs
> >
> > > > > > > Bien lo que hago es asignar a "bsource" (que es un bindingsource) 
> > > > > > > la
> > > > > > > lista de las LaborActividadPlan. Cuando quiero eliminar un hijo, 
> > > > > > > me
> > > > > > > "paro" sobre el hijo y hago:
> > > > > > > bsource.RemoveCurrent();
> >
> > > > > > > y despues le doy Guardar:
> >
> > > > > > > this.ActividadPlanBL.Guardar(this.ActividadPlan);
> >
> > > > > > > Solamente guardo el padre, el hijo se borra solo, NHibernate se dá
> > > > > > > cuenta solito y lo elimina.
> >
> > > > > > > Tambien adjunto los mapping para que vean.
> >
> > > > > > > Ahora despues la seguimos...ahora tengo que salir..nos vemos gente
> >
> > > > > > > On 1/30/07, Ezequiel Jadib <[EMAIL PROTECTED]> wrote:
> >
> > > > > > > > si al elemento que eliminas en la lista no le haces un delete 
> > > > > > > > no te va a
> > > > > > > > funcionar
> > > > > > > >  ________________________________
> >
> > > > > > > > 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: Tuesday, January 30, 2007 7:42 PM
> > > > > > > > Subject: [NHibernate-Hispano] Re: Problemas con un update
> >
> > > > > > > > Lo que me dices es lo que intentaba hacer, es decir, elimino el
> > > > > > > > elemento de la lista en memoria, luego hago el update de la 
> > > > > > > > persona, y
> > > > > > > > ahí es donde me da error, por lo que ya no puedo seguir.
> >
> > > > > > > > On 30 ene, 22:45, "Andrés G. Aragoneses [ knocte ]" <[EMAIL 
> > > > > > > > PROTECTED]>
> > > > > > > > wrote:
> > > > > > > > > Chili escribió:
> >
> > > > > > > > > > Eso de hacer el delete de la propia entidad ya tiene más 
> > > > > > > > > > sentido :).
> > > > > > > > > > No obstante, como yo también soy un principiante, me 
> > > > > > > > > > gustaría que
> > > > > > > > > > alguien que estuviese más ducho me dijera si es necesario.
> >
> > > > > > > > > > En cuanto a lo del inverse=true, es necesario? Lo digo 
> > > > > > > > > > porque yo no
> > > > > > > > > > necesito tener ninguna referencia desde EmailDA a 
> > > > > > > > > > DatosPersonalesDA, y
> > > > > > > > > > según tengo entendido, inverse=true, es que puedes dar la 
> > > > > > > > > > vuelta, es
> > > > > > > > > > decir:
> >
> > > > > > > > > >  Persona 1 - n Direcciones
> >
> > > > > > > > > >  Persona.Direcciones[0].Persona
> >
> > > > > > > > > Opino lo mismo que tú, que el inverse="true" sólo es necesario
> > > > > > > > > especificarlo en los casos en los que tienes acceso desde los 
> > > > > > > > > dos
> > > > > > > > > sentidos de la colección, y sólo en uno de los extremos.
> >
> > > > > > > > > Lo que yo haría es hacer dos cosas: eliminar el elemento de 
> > > > > > > > > la lista,
> > > > > > > > > hacer SaveOrUpdate en Persona, y luego eliminar con Delete la 
> > > > > > > > > dirección
> > > > > > > > > propiamente dicha, y luego Flush.
> >
> > > > > > > > >         Andrés [ knocte ]
> >
> > > > > > > > > --
> >
> > > > > > > --
> > > > > > > Dario Quintanahttp://blog.darioquintana.com.ar
> >
> > > > > > >  codigo.zip
> > > > > > > 8 KDescargar
> >
> > > > > --
> > > > > Dario Quintanahttp://blog.darioquintana.com.ar
> >
> > > > >  codigo2.ZIP
> > > > > 5 KDescargar
> >
> > > --
> > > Dario Quintana
> > >http://blog.darioquintana.com.ar
>
>
> >
>


-- 
Dario Quintana
http://blog.darioquintana.com.ar

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