C# 用户代码未处理实体异常

C# 用户代码未处理实体异常,c#,linq,exception,foreach,dto,C#,Linq,Exception,Foreach,Dto,我在foreach循环中收到一个名为“用户代码未处理实体异常”的错误。为什么会这样?我做错了什么 public IList<ProductDTO> GetProducts() { IList<ProductDTO> listofproducts = new List<ProductDTO>(); using (var db = new NORTHWNDEntities()) {

我在foreach循环中收到一个名为“用户代码未处理实体异常”的错误。为什么会这样?我做错了什么

    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,
                                   };

首先检查是否可以访问数据源。如果没有问题,那么需要检查查询结构。您正在迭代查询,但没有遍历查询结果。使用ToList方法将查询转换为List,以对其进行迭代。您需要使用方法将查询结果转换为列表

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 });
}
您可以使用投影直接创建
ProductDTO
的对象

IList<ProductDTO> listOfProcuts = (from p in db.Products
                                   select new ProductDTO 
                                   {
                                       Name = p.ProductName,
                                   }).ToList();

return listOfProcuts ;
IList ListofProcts=(来自db.Products中的p
选择新产品,然后单击“添加”
{
Name=p.ProductName,
}).ToList();
返回文档列表;

首先检查您是否可以访问数据源。如果没有问题,那么需要检查查询结构。您正在迭代查询,但没有遍历查询结果。使用ToList方法将查询转换为List,以对其进行迭代。您需要使用方法将查询结果转换为列表

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 });
}
您可以使用投影直接创建
ProductDTO
的对象

IList<ProductDTO> listOfProcuts = (from p in db.Products
                                   select new ProductDTO 
                                   {
                                       Name = p.ProductName,
                                   }).ToList();

return listOfProcuts ;
IList ListofProcts=(来自db.Products中的p
选择新产品,然后单击“添加”
{
Name=p.ProductName,
}).ToList();
返回文档列表;

< /代码> AdIL的答案是正确的,将解决您的问题,但您可能会考虑返回<代码> iQuestaby<代码>,而不是<代码> IISTIS/COD>。p>

遵循信息隐藏的原理,如果调用GET产品()的程序的其他部分不需要列表语义,则它们不应该看到“代码”ILIST/COD>语义

< AdIL的答案是正确的,并将解决您的问题,但您可以考虑返回<代码> iQuestaby<代码>,而不是<代码> IIST < /COD>。p>
遵循信息隐藏的原则,如果调用GetProducts()的程序的其他部分不需要列表语义,那么它们就不应该看到
IList
语义如果要找到确切的问题,请以这种方式在try-catch语句中编写代码

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);
            }
试试看
{
//编写代码
} 
捕获(System.Data.Entity.Validation.DbEntityValidationException ex)
{
var outputLines=新列表();
foreach(ex.EntityValidationErrors中的var eve)
{
outputLines.Add(string.Format(
{0}:状态为“{2}\”的类型为“{1}\”的实体存在以下验证错误:“,
DateTime.Now,eve.Entry.Entity.GetType().Name,eve.Entry.State));
foreach(eve.ValidationErrors中的变量ve)
{
outputLines.Add(string.Format(
-属性:\“{0}\”,错误:\“{1}\”,
ve.PropertyName,ve.ErrorMessage));
}
}
System.IO.File.AppendAllLines(@“c:\temp\errors.txt”,outputLines);
}

如果您想找到问题的确切位置,请以这种方式在try-catch语句中编写代码

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);
            }
试试看
{
//编写代码
} 
捕获(System.Data.Entity.Validation.DbEntityValidationException ex)
{
var outputLines=新列表();
foreach(ex.EntityValidationErrors中的var eve)
{
outputLines.Add(string.Format(
{0}:状态为“{2}\”的类型为“{1}\”的实体存在以下验证错误:“,
DateTime.Now,eve.Entry.Entity.GetType().Name,eve.Entry.State));
foreach(eve.ValidationErrors中的变量ve)
{
outputLines.Add(string.Format(
-属性:\“{0}\”,错误:\“{1}\”,
ve.PropertyName,ve.ErrorMessage));
}
}
System.IO.File.AppendAllLines(@“c:\temp\errors.txt”,outputLines);
}

Adil,同样的事情正在发生,但这次是ToList();您能否在获得异常的代码周围放置try-catch块,并检查您是否成功地与数据库连接使用数据上下文,进行简单查询并检查它是否工作。从db.Products中的p中选择p).ToList();在代码“to.list”的末尾和foreach循环的开头,我得到了相同的错误。Adil,同样的事情正在发生,但这次是ToList();您能否在获得异常的代码周围放置try-catch块,并检查您是否成功地与数据库连接使用数据上下文,进行简单查询并检查它是否工作。从db.Products中的p中选择p).ToList();我在代码“to.list”的末尾和foreach循环的开头都遇到了相同的错误。是的,它似乎是正确的,但缺少了一些东西。WPF中没有显示任何数据。是的,它似乎是正确的,但缺少一些内容。WPF中未显示任何数据。请发布完整的异常。请发布完整的异常。