la excepción de entidad no fue manejada por el código de usuario
Frecuentes
Visto 7,303 equipos
2
Recibo un error llamado "la excepción de entidad no fue manejada por el código de usuario" en el bucle foreach. ¿Por qué está pasando esto? ¿Qué estoy haciendo mal?
public IList<ProductDTO> GetProducts()
{
IList<ProductDTO> listofproducts = new List<ProductDTO>();
using (var db = new NORTHWNDEntities())
{
var query = from p in db.Products
select new
{
Name = p.ProductName,
};
El error ocurre justo en ella en el foreach.
*foreach (var product in query)*
{
listofproducts.Add(new ProductDTO { Name = product.Name });
}
}
return listofproducts;
}
3 Respuestas
3
Si desea encontrar el problema exacto, ¿dónde está el problema? Escriba el código en la instrucción try catch de esta manera.
try
{
//write code
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
var outputLines = new List<string>();
foreach (var eve in ex.EntityValidationErrors)
{
outputLines.Add(string.Format(
"{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:",
DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State));
foreach (var ve in eve.ValidationErrors)
{
outputLines.Add(string.Format(
"- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage));
}
}
System.IO.File.AppendAllLines(@"c:\temp\errors.txt", outputLines);
}
Respondido el 08 de diciembre de 16 a las 09:12
1
En primer lugar, compruebe si puede acceder a la fuente de datos. Si está bien, debe verificar la estructura de su consulta. Está iterando a través de la consulta pero no a través de los resultados de la consulta. Use el método ToList para convertir la consulta a Lista para iterar a través de ella. Necesitas usar Enumerable.ToList método para convertir los resultados de la consulta a la lista.
var query = (from p in db.Products
select new
{
Name = p.ProductName,
}).ToList();
foreach (var product in query)*
{
listofproducts.Add(new ProductDTO { Name = product.Name });
}
Puede crear directamente objetos de ProductDTO
utilizando la proyección.
IList<ProductDTO> listOfProcuts = (from p in db.Products
select new ProductDTO
{
Name = p.ProductName,
}).ToList();
return listOfProcuts ;
Respondido el 23 de diciembre de 12 a las 13:12
Adil, está pasando lo mismo pero esta vez es ToList(); - Zaz
¿Puede colocar el bloque try catch alrededor del código que está obteniendo la excepción y verificar si se conecta correctamente con el contexto de datos de uso de la base de datos, hacer una consulta simple y verificar si funciona? desde p en db.Products seleccione p).ToList(); - Adil
Recibo el mismo error al final del código "to.list" y al comienzo del bucle foreach. - Zaz
0
La respuesta de Adil es correcta y resolvería tu problema, pero podrías considerar regresar IEnumerable<ProductDTO>
en lugar de IList<DTO>
.
Siguiendo el principio de ocultar información, si las otras partes del programa que llaman a GetProducts() no necesitan semántica de lista, entonces no deberían ver el IList<T>
semántica
Respondido el 23 de diciembre de 12 a las 13:12
Sí y parece ser correcto, pero falta algo. No se muestran datos en WPF. - Zaz
Por favor, publique la excepción completa. - John Saunders