none
problema utilizando elf tracking objects, los cambios siempre se guardan incluso si necesito que no se guarden. RRS feed

  • Pregunta

  • Hola a todos. Estoy recién comenzando a trabajar con entity framwork y self tracking objects (objetos de seguimiento propio? creo que es la traducción) así que no comprendo del todo esto todavía. Aquí en mi trabajo estamos tratando de implementar una arquitetctura de n-capas orientada al dominio. He estado siguiendo este ejemplo: http://jhonnyslopez.wordpress.com/2011/08/30/mi-primera-n-capas-con-entityframework-y-wcf-parte-1/ Mi problema es el siguiente: Los cambios que realizo a la instancia de una entidad siempre se guardan en la base de datos incluso si necesito que no sea así. Este es el código del método que realiza los cambios:

     public void ActualizaInscripcion(EGestionPostulante postulante, string rutConyuge, string digitoConyuge)
         {

             IConsultableUnidadDeTrabajo unidadDeTrabajo = (IConsultableUnidadDeTrabajo)UnidadDeTrabajo;

             IObjectSet<SOLICITUD> solicitud = unidadDeTrabajo.CrearSet<SOLICITUD>();
            
                   var query = from s in solicitud
                         where s.SOL_ID == postulante.Identificacion_Persona.SOL_ID
                         select s;

             SOLICITUD solantigua = query.FirstOrDefault<SOLICITUD>();

             SOLICITUD SOLNueva = new SOLICITUD
               {
                   IDO_ID = solantigua.IDO_ID,
                   ENT_ID = solantigua.ENT_ID,
                   ENT_ID_REC = solantigua.ENT_ID_REC,
                   REG_ID = solantigua.REG_ID,
                   FNC_ID = solantigua.FNC_ID,
                   SOL_RCN_FEC = solantigua.SOL_RCN_FEC,
                   SOL_ING_FEC = solantigua.SOL_ING_FEC,
                   SOL_USR_REC = solantigua.SOL_USR_REC,
                   SOL_USR_DIG = solantigua.SOL_USR_DIG,
                   SOL_FOL = solantigua.SOL_FOL,
                   SOL_MOD = solantigua.SOL_MOD,
                   SOL_TIP = "5",
                   SOL_EST = solantigua.SOL_EST,
                   SOL_ARE_EVA = solantigua.SOL_ARE_EVA,
                   IDO_ID_PRY = solantigua.IDO_ID_PRY
                  
               };

                             

             Repositorio<SOLICITUD> repsolicitud = new Repositorio<SOLICITUD>(unidadDeTrabajo);
             repsolicitud.Agregar(SOLNueva);
                    

             using (TransactionScope transaccion = new TransactionScope())

             {
                 unidadDeTrabajo.RealizarCambios();

                 transaccion.Complete();
             }

     

     IConsultableUnidadDeTrabajo es la unidad de trabajo. Contiene metodos implementados en el archivo context.tt para registrar los cambios. El objeto postulante es del tipo EGestionPostulante. EGestionPostulante es una clase que utilizo como una entidad. Necesitaba agrupar varias entidades del mi modelo, así que cree esa clase cuyos atributos son entidades (generadas automáticamente a partir del modelo EF) las cuales necesitaba agrupar (no se si es correcto hacer eso en todo caso). En fin, el problema es que necesito solo insertar el objeto "solNueva" (una instancia de SOLICITUD), pero todos los cambios que realizé antes, incluso si no registré el cambio con ApplyChanges(entidad), se guarda en la base de datos. En este caso los cambios que se realizaron antes a "postulante" (que contiene varias entidades, como dije anteriormente).Al final unidadDeTrabajo.RealizarCambios() llama al metodo SaveChanges(). Intenté utilizar postulante.MarkAsUnchanged() pero no funciona. Quizás hay algo mal implementado, pero no consigo entender qué. Según el ejemplo que seguí se implementó un repositorio que posee los metodos agregar(), modificar(), y borrar(). pero aunque no los llame, de todas formas se guardan los cambios. Muchas gracias si te diste el tiempo de leer esto. Espero que se entienda.

    • Editado PaulNet83 martes, 6 de diciembre de 2011 14:57 el texto perdió el formato.
    martes, 6 de diciembre de 2011 14:55

Todas las respuestas