C# 如何在MVC5中加载两个模型以生成单个输出

C# 如何在MVC5中加载两个模型以生成单个输出,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个名为employees的MVC控制器,它基于一个employees表。其中一个employee字段具有指向访问级别表的外键链接。这两个表都是MVC应用程序(access和employee)中的模型 当我创建一个视图来列出所有员工时,我得到了这个错误,它指出了它的错误,因为它不能引用access表/模型中的accessleveldescription字段 我得到一个错误: ObjectContext实例已被释放,不能再用于需要连接的操作 我想知道的是,如何将两者链接起来,以便在视图中显示信

我有一个名为employees的MVC控制器,它基于一个employees表。其中一个employee字段具有指向访问级别表的外键链接。这两个表都是MVC应用程序(access和employee)中的模型

当我创建一个视图来列出所有员工时,我得到了这个错误,它指出了它的错误,因为它不能引用access表/模型中的accessleveldescription字段

我得到一个错误: ObjectContext实例已被释放,不能再用于需要连接的操作

我想知道的是,如何将两者链接起来,以便在视图中显示信息

我知道在填充视图时正在查找AccessLevelDescription,此时DBContext已经关闭,因此出现了错误,我只是不确定如何修复它

读了几篇文章,尝试添加ToList(但可能设置错误),我尝试创建变量来保存AccessLevelDescription,但仍然无法将两者链接起来

控制器:

// 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; }
}