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

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!
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)); }
-
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 -
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