4

我正在为我的 MVC4 项目使用 Entity Framework 5.0。它有问题。当我将数据库模型提供给任何视图时,控制器会发送没有关系的模型

例子;

我有用户类和关系部门

当我在控制器中使用它时

using(context)
{
  var user = context.Find(id);
  string department = user.Department.Name;
} 

它在上下文中调用时起作用。但是当我这样做时

using(context)
{
  var user = context.Find(id);
  return View(user);
} 

并在视图中调用

Model.Department.Name 

我有错误。

这是我的答案,但它不好

using(context)
{
  var user = context.Find(id);
  string department = user.Department.Name;
  return View(user);
} 

当我尝试在视图中使用 Model.Department.Name 时,我没有收到任何错误,当我使用类作为模型时,我必须对每个关系都这样做。这个问题有更好的解决方案吗?我想在视图中使用所有关系而不在控制器中调用这些。

我希望你能理解我,对不起我的英语。

4

3 回答 3

1

在您的 DbContext 上,您可以使用该.Include方法急切地加载您需要的关系:

context.Users.Include(u => u.Department).FirstOrDefault(u => u.Id == id);

或者如果您使用的是较旧版本的实体框架,则此方法的通用版本可能不可用:

context.Users.Include("Department").FirstOrDefault(u => u.Id == id);
于 2013-02-25T13:06:10.367 回答
1

原因是您没有在原始代码中“加载”部门。由于您的上下文包含在 using 语句中,因此在创建视图之前将其处理掉,因此您的用户对象缺少您想要的数据。

在您的第二个代码示例中,您专门调用了相关的 Department 对象,因此它现在存在于 User 对象中。

您需要使用类似的方式在原始行中急切地加载部门

context.User.Include(c => c.Department).Find(id);

现在您的用户对象应该可以在视图中使用它。

于 2013-02-25T13:12:15.387 回答
1

你想完成什么?为具有一个或多个部门的用户列出视图?

于 2013-02-25T13:25:39.800 回答