none
El objeto no se puede eliminar porque se encontró en ObjectStateManager.

    Question

  • Buenas noches a todos ante todo gracias por las respuestas el tema es el siguiente
    Estoy utilizando EF4 y tengo en la base de datos un tabla maestro y una tabla detalle, todo trabaja bien hasta que se desea actualizar el detalle quitando algún elemento y agregando otros al detalle

    la tabla Usuarios tiene esta estructura (idUsuario, sesion, nombre, estaactivo)
    la tabla UsuariosRoles tiene esta estructura (idusuario, idrol)

    La base de datos tiene estos datos

    Usuario
    IdUsuario Sesion Nombre EstaActivo
    1 Admin Adminsitrador 1
    2 Cajero Juan Perez 1

    UsuariosRoles
    IdUsuario idRol
    1 1
    2 2
    2 3

    Entonces se desea hacer la siguiente operacion
    retirar el rol 2 al usuario 2 y agregar el rol 1 al usuario 2
    como leen es una operación sencilla pero no doy como hacerlo he implementado esta rutina

    // eliminamos los registros que no existen
    foreach (var usuarioRol in (from ini in usuario.UsuariosRoles
    							where !(from fin in pUsuario.Roles
    									select fin).Contains(ini.IdRol)
    							select new SegUsuariosRoles 
    							{
    								IdRol = ini.IdRol,
    								IdUsuario = ini.IdUsuario
    							}))
    {
    	bd.UsuariosRoles.DeleteObject(usuarioRol);
    }
    
    //agregar los registros nuevos
    foreach (var usuarioRol in (from ini in pUsuario.Roles
    							where !(from fin in usuario.UsuariosRoles
    									select fin.IdRol).Contains(ini)
    							select ini).Select(rol => new SegUsuariosRoles
    																		 {
    																			 IdRol = rol
    																		 }))
    {
    	usuario.UsuariosRoles.Add(usuarioRol);
    }

    Donde pUsuario.roles tiene la nueva asignacion de roles y usuario.usuarioRoles son los datos en la BD
    la variable bd representan a las entidades de la base de datos mapeadas en EF

    pero en la linea

    bd.UsuariosRoles.DeleteObject(usuarioRol);

    el sistema se queja y me muestra
    El objeto no se puede eliminar porque se encontró en ObjectStateManager.
    y en otras muestra
    Colección modificada; puede que no se ejecute la operación de enumeración.

    y no doy con la solución quizá alguno de ustedes pueda ayudarme a ver la luz.

    ante la pregunta por que hago esta rutina es que es una aplicación de varias capas y el cliente nunca se  llega a enlazar directamente a la base de datos

    gracias de antemano

    Americo

    Thursday, September 13, 2012 11:52 PM