我正在使用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。我做错了什么?
答案 0 :(得分:3)
您的Model类具有参数化构造函数,这就是您收到此错误的原因。删除参数化构造函数(如果删除构造函数会更好)。或者再创建一个没有参数的构造函数
NullReferenceExceptions
实际上,您确实不需要通过构造函数传递值来初始化您的字段或属性,因为您从数据库获取记录或通过viewModel或视图设置这些值。
构造函数只包含导航属性的另一个模型的引用或集合,这有助于实例化导航集合以防止{{1}}一点点。但它不是必需的。所以最好从你使用过这样的构造函数的每个类中删除你的构造函数。