Asp.net mvc ASP.NET MVC实体框架关系绑定

Asp.net mvc ASP.NET MVC实体框架关系绑定,asp.net-mvc,entity-framework,relationship,Asp.net Mvc,Entity Framework,Relationship,我在MVC4项目中使用EntityFramework5.0。这有问题。当我给任何视图一个db模型时,控制器发送的模型没有关系 榜样 我有用户类和关系部门 当我在控制器中使用它时 using(context) { var user = context.Find(id); string department = user.Department.Name; } 它在上下文中调用时工作。但是当我这么做的时候 using(context) { var user = context.Find

我在MVC4项目中使用EntityFramework5.0。这有问题。当我给任何视图一个db模型时,控制器发送的模型没有关系

榜样

我有用户类和关系部门

当我在控制器中使用它时

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时,我没有得到任何错误,当我使用类作为模型时,我必须对每个关系都这样做。这个问题有更好的解决办法吗?我想使用视图中的所有关系,而不在控制器中调用这些关系


我希望您能理解我,抱歉,我的英语。

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

context.Users.Include(u => u.Department).FirstOrDefault(u => u.Id == id);
或者,如果您使用的是旧版本的entity Framework,则此方法的通用版本可能不可用:

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

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

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

您需要使用以下命令在原始行中加载部门

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

现在,您的用户对象应该在视图中具有此功能。

您想实现什么?列出具有一个或多个部门的用户的视图

您到底遇到了什么错误?“ObjectContext实例已被释放,无法再用于需要连接的操作。”这是一个错误,我可以通过控制器上的调用关系来修复它,但我不想一直调用它们。应该有一个绑定函数或EF之类的东西。您是否尝试过使用Model.Department.Name而不是Model.User来在视图中创建Model.User?好的,我知道了,Darin,这是另一个问题。我有旧版本的5.0 ef。还有另一种关系,比如var alluserInYourDepartment=User.Department.Users;那个包含方法呢?包含它吗?:)这里还有一个问题。我有旧版本的5.0 ef。还有另一种关系,比如var alluserInYourDepartment=User.Department.Users;那个包含方法呢?包含它吗?:)如果看不到更多的代码,就很难提供帮助。我认为你需要了解EF的工作原理。假设您的模型具有正确的导航属性(因此您的部门具有公共ICollection Users{get;set;}属性),那么您应该能够按照建议使用User.Department.Users从给定用户的部门获取所有用户。我在这里尝试了一个非常简单的测试,它在没有进一步包含的情况下工作。mvc3-4?ef 4.0或5.0或6.0您使用哪一种?我使用的是MVC4和ef 5.0,但我相信这一概念应该适用于所有版本。不,想象一下我有车辆、车辆请求、车辆请求批准。当我想在视图中查看车辆请求详细信息时,我应该查看哪个用户做了类似的操作用户a已批准用户b取消用户c未响应。所以我必须对每个请求都这样做。approve approve.User.Username就是这样的,所以它的意思是包括没有足够的权限