C# 如何在MVC5中加载两个模型以生成单个输出
我有一个名为employees的MVC控制器,它基于一个employees表。其中一个employee字段具有指向访问级别表的外键链接。这两个表都是MVC应用程序(access和employee)中的模型 当我创建一个视图来列出所有员工时,我得到了这个错误,它指出了它的错误,因为它不能引用access表/模型中的accessleveldescription字段 我得到一个错误: ObjectContext实例已被释放,不能再用于需要连接的操作 我想知道的是,如何将两者链接起来,以便在视图中显示信息 我知道在填充视图时正在查找AccessLevelDescription,此时DBContext已经关闭,因此出现了错误,我只是不确定如何修复它 读了几篇文章,尝试添加ToList(但可能设置错误),我尝试创建变量来保存AccessLevelDescription,但仍然无法将两者链接起来 控制器:C# 如何在MVC5中加载两个模型以生成单个输出,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个名为employees的MVC控制器,它基于一个employees表。其中一个employee字段具有指向访问级别表的外键链接。这两个表都是MVC应用程序(access和employee)中的模型 当我创建一个视图来列出所有员工时,我得到了这个错误,它指出了它的错误,因为它不能引用access表/模型中的accessleveldescription字段 我得到一个错误: ObjectContext实例已被释放,不能再用于需要连接的操作 我想知道的是,如何将两者链接起来,以便在视图中显示信
// GET: Employee
public ActionResult Index()
{
List<accesslevel> AccessList = new List<accesslevel>();
List<userdetail> EmployeeList = new List<userdetail>();
using (dbEntities dbModel = new dbEntities())
{
EmployeeList = dbModel.userdetails.ToList<userdetail>();
AccessList = dbModel.accesslevels.ToList<accesslevel>();
}
return View(EmployeeList);
}
//GET:Employee
公共行动结果索引()
{
List AccessList=新列表();
List EmployeeList=新列表();
使用(dbEntities dbModel=new dbEntities())
{
EmployeeList=dbModel.userdetails.ToList();
AccessList=dbModel.accesslevels.ToList();
}
返回视图(EmployeeList);
}
视图:
@foreach(模型中的变量项){
@DisplayFor(modelItem=>item.UserName)
@DisplayFor(modelItem=>item.UserEmail)
@DisplayFor(modelItem=>item.UserPassword)
@DisplayFor(modelItem=>item.UserCreateDate)
@DisplayFor(modelItem=>item.UserLastLogin)
@DisplayFor(modelItem=>item.accesslevel.AccessLevelDescription)
@DisplayFor(modelItem=>item.companydetail.CompanyName)
@ActionLink(“编辑”,“编辑”,新的{id=item.UserID})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.UserID})|
@ActionLink(“删除”,“删除”,新的{id=item.UserID})
将期望结果填充员工信息,以及指定给员工的指定访问级别。您应该使用此访问级别:
EmployeeList = dbModel.userdetails.Include(x => x.accesslevels).ToList();
而不是:
EmployeeList = dbModel.userdetails.ToList<userdetail>();
EmployeeList=dbModel.userdetails.ToList();
补充答案,如果您使用的是延迟加载,则不需要使用包含
。只需在员工
中使用虚拟访问
属性即可:
public class Employee
{
public Guid EmployeeId { get; set; }
public string Name { get; set; }
//This is the FK from Access entitie
public int AccessId { get; set; }
//This is the referente to use with the EF Lazy Loading
public virtual Access Access { get; set; }
}
如果您不想使用惰性加载,那么使用hassan.ef给出的include来回答是正确的
public class Employee
{
public Guid EmployeeId { get; set; }
public string Name { get; set; }
//This is the FK from Access entitie
public int AccessId { get; set; }
//This is the referente to use with the EF Lazy Loading
public virtual Access Access { get; set; }
}