asp mvc中的EntityFramework.dll发生System.Data.DataException错误

时间:2015-11-06 18:49:16

标签: c# asp.net-mvc entity-framework

所以我遇到了这个错误:

  

未处理的类型' System.Data.Entity.ModelConfiguration.ModelValidationException'发生在EntityFramework.dll中。

enter image description here

以下是代码:

public ActionResult SaveItems(string[] fooItems, int category_id)
{
     foreach (item item in DB.items)
     {
          if (item.category_id == category_id)
          {
              if(item != null)
                  DB.items.Remove(item);

              DB.SaveChanges();
          }
     }
}

我试图从数据库中删除某个项目,然后在我收到此错误后保存更改。

感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

正如评论中正确提到的那样,您在使用foreach循环时无法对基础列表进行更改。将您的操作方法更改为:

public ActionResult SaveItems(string[] fooItems, int category_id)
{
     var itemsToRemove = DB.items.Where(i => i.category_id == category_id).ToList();

     DB.items.RemoveRange(itemsToRemove);
     DB.SaveChanges();
}

答案 1 :(得分:0)

你有几个问题:

  1. 您正在修改foreach中的列表(正如Alex Krupka在评论中所述)
  2. 您每次删除后都会调用SaveChanges
  3. 此代码一次加载一个项目,导致对DB的大量不必要的调用
  4. 您正在从名为" SaveItems"
  5. 的方法中删除项目

    我会使用以下内容:

    public ActionResult SaveItems(string[] fooItems, int category_id)
    {
        var itemsToRemove = DB.items.Where(e => e.category_id == category_id)
                                    .ToList();
        foreach (var item in itemsToRemove)
        {
            DB.items.Remove(item);
        }
        DB.SaveChanges();
    }