>Con composite-id el saveorupdate no funciona. Y Update a secas? Ya lo he probado y el error es el mismo.
> debes tener el campo idpersonales not null en la tabla y lo estas mandando > null No puedo permitir null porque forma parte de una composite-id. Andrés te voy a plantear el problema a ver si me puedes hechar un cable en el modelado de datos. Tengo una tabla DatosPersonales. Uno de los campos que pueden tener los datos personales son emails. Puede tener 0, 1 o muchos. La tabla Email tiene una clave foránea a DatosPersonales, que es la famosa idpersonales, y otro campo de texto con el email. Si la clave primaria sólo fuese idpersonales, cada persona sólo podría tener un email, y si la clave fuese el email, dos usuarios no podrían compartir un email (esto no es tan descabellado, pero es una restricción que puede necesitar ser violada. Piensen en un email de un laboratorio, una organización, etc). Los demás también pueden hacer sus sugerencias. Gracias por todo! On 1 feb, 20:15, "Ezequiel Jadib" <[EMAIL PROTECTED]> wrote: > 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 > > ... > > leer más » --~--~---------~--~----~------------~-------~--~----~ Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups-beta.google.com/group/NHibernate-Hispano -~----------~----~----~----~------~----~------~--~---
