我有一个名为Student的Entity Framework类。它有一个类列表。现在,每当我(从我的视图)引用ViewBag.Student.Classes时,它都会因对象处置异常而失败,因为我的控制器看起来像这样:
using(var myObjectContext = new ModelContainer()) {
ViewBag.Student = myObjectContext.UserSet.OfType<Student>().FirstOrDefault(s => s.Id == ActiveStudentSignedIn);
}
现在,我知道我也可以在viewbag中传入学生的课程,但是当使用依赖于学生及其细节的强类型部分视图时,这会增加复杂性。
我认为在那里没有“using”关键字是错误的,因为垃圾收集器不会为垃圾收集器留下太多垃圾吗?
我显然做错了什么。但是什么?
答案 0 :(得分:4)
有两种方法可以解决这个问题:
Include
方法)并直接从控制器操作传递您需要的所有数据。目前您收到异常,因为您的视图正在尝试触发延迟加载并对数据库执行另一个查询,但上下文已经处理完毕。 Dispose
方法中配置上下文。您还可以从外部注入上下文 - 依赖注入,但这需要一些其他基础结构。答案 1 :(得分:2)
您可以尝试eagerly loading associations:
ViewBag.Student = myObjectContext
.UserSet
.Include("Classes")
.OfType<Student>()
.FirstOrDefault(s => s.Id == ActiveStudentSignedIn);