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

Responder a