在 MVC4 项目中
我在 LINQ 查询中使用包含:

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

CourseTest 有一个测试对象

这适用于“使用上下文”

但一旦返回 Controller 使用:

返回测试。ToList();



UserCourse.Test 正在处理:



这曾经在旧版本中运行良好(不确定我是否使用 join 对其进行了测试)。

我怎样才能让它坚持下去..?

最佳答案

有时,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/你的加入条款真的有用吗? (仅当您想要 muse 具有用户类(class)的类(class)测试时。)

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

EF 生成查询,但仅在迭代结果时执行查询(在 foreach 循环中或使用 ToList()、ToArray()、ToDictionary()、...)因此,如果您的数据访问层使用 using 子句作为您的上下文,始终确保迭代您的结果,以使 EF 执行查询(例如,使用 ToList())。

关于asp.net-mvc-4 - 加入前包括不起作用 Entity Framework 6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20722859/

10-13 05:53