加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 加入前包含不起作用实体框架6

发布时间:2020-12-16 09:53:44 所属栏目:asp.Net 来源:网络整理
导读:在一个MVC4项目中 我在LINQ查询中使用include: var tests = from ct in context.CourseTest.Include("Test") join uc in context.UserCourse on ct.CourseID equals uc.CourseID select ct; CourseTest有一个测试对象 这适用于“使用上下文” 但一旦返回控
在一个MVC4项目中
我在LINQ查询中使用include:

> var tests = from ct in context.CourseTest.Include("Test")  join uc in
> context.UserCourse on ct.CourseID equals uc.CourseID select ct;

CourseTest有一个测试对象

这适用于“使用上下文”

但一旦返回控制器使用:

return tests.ToList();

UserCourse.Test正在处理:

The ObjectContext instance has been disposed and can no longer be used
for operations that require a connection.

这曾经在旧版本中正常工作(不确定我是否使用连接测试它).

我该怎么做才能坚持下去?

解决方法

有时,include子句被忽略.我不是所有情况都在脑海中,但加入,分组和预测实体将导致EF忽略包含.

在您的示例中,如果您这样做:

var Tests = from ct in context.CourseTest join uc in context.UserCourse on ct.CourseID equals uc.CourseID select ct; 
return Tests.Include("Test").ToList();

这将起作用,因为包含不会被投影,分组或连接子句覆盖.

只是另一件事:

1 /你的加入条款真有用吗? (只有当你想要缪斯有用户课程的课程测试时.)

2 /对于您处理的上下文,这是因为您的DbContext使用延迟加载.您的include子句被忽略但是延迟加载而不是null,您的测试导航属性包含代理(即不为null).因此,当您访问导航属性时,代理会看到未加载实际数据并执行查询以获取测试数据.您的上下文已被处理,因此您有例外.

EF生成查询但仅在迭代结果时执行查询(在foreach循环中或使用ToList(),ToArray(),ToDictionary(),…)因此,如果您的数据访问层为您的上下文使用using子句,总是一定要迭代你的结果,以使EF执行查询(例如使用ToList()).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读