none
entity framework {"ya hay un datareader abierto asociado a este command, debe cerrarlo primero."} RRS feed

  • Pregunta

  • Buenos días!

    Estoy intentando realizar esta consulta y me aparece la excepción que he indicado en le titulo:

    public ActionResult LeerServicios([DataSourceRequest] DataSourceRequest request)
            {
                ApplicationUser usuario = dbUsers.Users.Find(User.Identity.GetUserId());
                int centroid = usuario.centroID;
                List<Servicio> servicios = new List<Servicio>();
                foreach (Servicio servicio in db.Servicios) {
                    servicio.ImporteMatricula = db.TarifasServicioCentro.Where(tar => tar.ServicioID == servicio.ID && tar.CentroID == centroid).FirstOrDefault().Descuento;
                    servicio.ImporteMensual = db.TarifasServicioCentro.Where(tar => tar.ServicioID == servicio.ID && tar.CentroID == centroid).FirstOrDefault().Importe;
                    servicios.Add(servicio);
                }
                return Json(servicios.Select(o => new
                {
                    ID = o.ID,
                    Nombre = o.Nombre,
                    ImporteMatricula = o.ImporteMatricula,
                    ImporteMensual = o.ImporteMensual
                }).ToDataSourceResult(request));
            }

    Me aparece al intentar hacer la consulta:

    db.TarifasServicioCentro.Where(tar => tar.ServicioID == servicio.ID && tar.CentroID == centroid).FirstOrDefault().Descuento;

    y deduzco que en la siguiente también fallara pero como no continua...

    Muchas Gracias!

    jueves, 13 de agosto de 2015 9:00

Todas las respuestas

  • SOLUCIONADO!!

    Cuelgo la solución!

    public ActionResult LeerServicios([DataSourceRequest] DataSourceRequest request)
            {
                ApplicationUser usuario = dbUsers.Users.Find(User.Identity.GetUserId());
                int centroid = usuario.centroID;
                var servicios = db.Servicios.Include(s => s.SubTipoServicio);
                var tarifas = db.TarifasServicioCentro.ToList();
                foreach (Servicio servicio in servicios)
                {
                    servicio.ImporteMensual = tarifas.Where(tar => tar.ServicioID == servicio.ID && tar.CentroID == usuario.centroID).FirstOrDefault().Importe;
                    servicio.ImporteMatricula = tarifas.Where(tar => tar.ServicioID == servicio.ID && tar.CentroID == usuario.centroID).FirstOrDefault().Descuento;
                }
                return Json(servicios.Select(o => new
                {
                    ID = o.ID,
                    Nombre = o.Nombre,
                    ImporteMatricula = o.ImporteMatricula,
                    ImporteMensual = o.ImporteMensual
                }).ToDataSourceResult(request));
            }

    jueves, 13 de agosto de 2015 9:51
  • hola

    pero si haces esto

    vartarifas =db.TarifasServicioCentro.ToList();

    te estas trayendo toda la tabla a memoria, puede que tengas unos pocos datos por eso no afecte, pero te traes todo

    no evaluaste habilitar MARS en el connection string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 13 de agosto de 2015 11:47
  • buenas me puede ayudar con esto??

    NO entiendo por se presenta este problema. puedes expicarme por q, gracias??

    ' GET: Certificados
            Function Index() As ActionResult
                Dim a = db.Actividades.Include(Function(x) x.Certificado).ThenInclude(Function(x) x.Alumnos)
                Return View(a)
            End Function

    el codigo en Razor

    @For Each item In Model
        If item.Certificado.Count > 0 Then
            @<tr>
                <td>
                    @Html.DisplayFor(Function(modelItem) item.NombreActividad)
                </td>
                <td>
                    @Html.DisplayFor(Function(modelItem) item.TipoActividad)
                </td>
                <td>
                    @Html.DisplayFor(Function(modelItem) item.Certificado.Count)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", New With {.id = item.ID}) |
                    @Html.ActionLink("Details", "Details", New With {.id = item.ID}) |
                    @Html.ActionLink("Delete", "Delete", New With {.id = item.Id})
                </td>
            </tr>   
        End If
    Next
    

    El error

    jueves, 16 de noviembre de 2017 4:09