none
Buscar un objeto en el contexto antes de usar ObjectContext.AddObject(string entiySetName, object entity) RRS feed

  • Pregunta

  • Bueno mi duda es muy concreta, quiero agregar un objeto a un contexto, pero antes de agregarlo quiero estar seguro de que no se agrego antes y asi evitar el error "An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key." o en español "Ya existe un objeto con la misma clave en ObjectStateManager. ObjectStateManager no puede realizar el seguimiento de varios objetos con la misma clave.".

    Ya logre buscar el objeto entre los que ya estan guardados en la base de datos, pero no logro encontrar un objeto que ya se agrego al contexto pero que aun no ha sido guardado en la base de datos. Les dejo mi codigo con algunos comentarios:

            public static TEntity SaveTransaccion<TEntity>(TEntity entity,
                     EntityKey key, CegasNetEntities context)
            {
                EntityObject ent = entity as EntityObject;

                try
                {
                    //Buscamos el objeto entre los que ya existen en la base de datos
                    TEntity dbEntity = (TEntity)context.GetObjectByKey(key);

                    //Si llego aqui, quiere decir que lo encontro, asi es que solo hago una copia
                    DeepCopy<TEntity>(entity, dbEntity);
                }
                catch (Exception ex)
                {
                    //Si hubo algun error y es del tipo no encontre el objeto, entonces no existe en la base de datos
                    if (ex is System.Data.ObjectNotFoundException)
                    {

                        //Aqui es donde quiero validar si el objeto existe en el contexto,
                        //se que no existe en la base de datos, pero si se agrego antes al contexto
                        //y aun no se ha hecho un SaveChanges() no lo encuentra y por lo tanto
                        //al querer agregar el objeto marca el error que ya comente


                        //Ya estando seguro completamente que no existe en el contexto, lo agrego
                        context.AddObject(key.EntitySetName, entity);
                    }
                }

                return entity;
            }

    ¿Hay algun tipo GetObjectByKey() que encuentre un objeto aunque no este aun guardado en la base de datos?


    Gracias por su tiempo...

    viernes, 5 de julio de 2013 16:29