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

Mac*_*icz -1 .net c# 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);
}
Run Code Online (Sandbox Code Playgroud)

然而,根据小组的说法,我得到一个例外:

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

我的型号:

   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; }
    }
Run Code Online (Sandbox Code Playgroud)

和团体课:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我确信数据库中的表不为空并且包含数据。调试的时候提示为null。我做错了什么?

Raj*_*put 5

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

private Group() {}
Run Code Online (Sandbox Code Playgroud)

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

并且构造函数仅包含导航属性的另一个模型的引用或集合,这有助于实例化导航集合以防止您受到一点点侵害NullReferenceExceptions。但这不是必需的。因此,最好从像这样使用构造函数的每个类中删除构造函数。