EntityFramework.SqlServer.dll中出现“System.Reflection.TargetInvocationException”类型的异常,但未在用户代码中处理

时间:2016-12-28 17:30:45

标签: c# .net entity-framework

我正在使用Entity Framework创建MVC应用程序。我试图以这种方式在控制器中访问我的数据库中的数据:

public ActionResult Classes()
{
    ClassDeclarationsDBEntities1 entities = new ClassDeclarationsDBEntities1();
    var model = new ClassesViewModel();
    model.task = entities.Tasks.ToList();
    model.subject = entities.Subjects.ToList();
    model.user = entities.Users.ToList();
    model.group = entities.Groups.ToList();
    return View(model);
}

然而,与小组一致,我得到一个例外:

  

类型'System.Reflection.TargetInvocationException'的异常   发生在EntityFramework.SqlServer.dll但未在用户中处理   代码

我的模特:

   public class ClassesViewModel
    {
        public List<Task> task { set; get; }
        public List<Subject> subject { set; get; }
        public List<Group> group { set; get; }
        public List<User> user { set; get; }
    }

小组课程:

namespace ClassDeclarationsThsesis.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Group
    {
        public Group(int id, int i, string modelGroupName, int teacherUserId)
        {
            this.class_id = id;
            this.group_id = i;
            this.name = modelGroupName;
            this.user_id = teacherUserId;
        }

        public int class_id { get; set; }
        public int group_id { get; set; }
        public string name { get; set; }
        public int user_id { get; set; }

        public virtual Subject Subject { get; set; }
        public virtual User User { get; set; }
    }
}

我确信DB中的表不是空的并且包含数据。在调试时,它表示它为null。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您的Model类具有参数化构造函数,这就是您收到此错误的原因。删除参数化构造函数(如果删除构造函数会更好)。或者再创建一个没有参数的构造函数

NullReferenceExceptions

实际上,您确实不需要通过构造函数传递值来初始化您的字段或属性,因为您从数据库获取记录或通过viewModel或视图设置这些值。

构造函数只包含导航属性的另一个模型的引用或集合,这有助于实例化导航集合以防止{{1}}一点点。但它不是必需的。所以最好从你使用过这样的构造函数的每个类中删除你的构造函数。