debes tener el campo idpersonales not null en la tabla y lo estas mandando null
-------------------------------------------------------------------------------- rdi2k | Ezequiel Jadib | MSN: [EMAIL PROTECTED] | Blogs: http://geeks.ms/blogs/ejadib/ (ES) - ejadib.wordpress.com (EN) ----- Original Message ----- From: Dario Quintana To: [email protected] Sent: Thursday, February 01, 2007 4:11 PM Subject: [NHibernate-Hispano] Re: Problemas con un update 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 -~----------~----~----~----~------~----~------~--~---
