Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视图中的MVC4模型问题:调试模式下的模型缺少详细信息_C#_Asp.net Mvc_Entity Framework_View_Ef Code First - Fatal编程技术网

C# 视图中的MVC4模型问题:调试模式下的模型缺少详细信息

C# 视图中的MVC4模型问题:调试模式下的模型缺少详细信息,c#,asp.net-mvc,entity-framework,view,ef-code-first,C#,Asp.net Mvc,Entity Framework,View,Ef Code First,我遇到了一个非常奇怪(和恼人)的问题: 在MVC 4 web应用程序中,从数据库加载数据并在视图中的模型上使用foreach时: @foreach (var meeting in Model) 我在方法的开头有一个断点,在检查对象会议时,我发现它遗漏了一些数据(对其他表的引用)。如果我打开(+)会议中的其他对象,则会显示缺少的数据 为什么? 谢谢 以下是我的控制器方法: public ActionResult GetMeetingMR(int id = 0) {

我遇到了一个非常奇怪(和恼人)的问题: 在MVC 4 web应用程序中,从数据库加载数据并在视图中的模型上使用foreach时:

@foreach (var meeting in Model)
我在方法的开头有一个断点,在检查对象会议时,我发现它遗漏了一些数据(对其他表的引用)。如果我打开(+)会议中的其他对象,则会显示缺少的数据

为什么?

谢谢

以下是我的控制器方法:

        public ActionResult GetMeetingMR(int id = 0)
    {
        var meetingPurpose = db.MeetingPurposes.ToList();
        ViewBag.MeetingPurpose = new SelectList(meetingPurpose, "MeetingPurposeID", "MeetingPurposeName");
        ViewBag.MRID = id;
        List<Meeting> meetings = (db.MortgageRequests.Find(id)).Meetings.ToList();
        return View(meetings);

    }
public ActionResult GetMeetingMR(int id=0)
{
var meetingPurpose=db.MeetingPurposes.ToList();
ViewBag.MeetingPurpose=新建选择列表(MeetingPurpose、“MeetingPurposeID”、“MeetingPurposeName”);
ViewBag.MRID=id;
List meetings=(db.MortgageRequests.Find(id)).meetings.ToList();
返回视图(会议);
}

将您的标题包括在问题中,我猜您在没有附加调试程序的情况下不会遇到问题。
正如其他人所评论的,这是由于
懒散加载

有时可能会出现此问题,因为在呈现
视图时正在处理实体容器,很可能是因为它是由调用容器析构函数的垃圾收集器收集的。

如果希望访问
视图上的实体
,可以使用
对象集上的
包含
。 比如说,
MeetingPurposes
有一个关联的
EntitySet
日期: 如果希望将它们包括在加载操作中,可以执行以下操作:
db.MeetingPurposes.Include(“日期”).ToList()


我不确定你的
Find
扩展方法是什么,所以我在
MortgageRequests

上使用了
Where
,你的问题与MVC4无关,而是与如何使用EF从数据库加载数据有关。您所经历的是实体框架中延迟加载的影响。所以请发布你的数据加载代码让我们帮助你。嗨@nemesv我刚刚用我的控制器的代码编辑了这个问题。谢谢。嗨@Silvermind,谢谢你的回答。到目前为止,我已经尝试了以下选项:
db.Meetings.Include(m=>m.MortgageRequest.Meetings)。其中(m=>m.MortgageRequest.MortgageRequestID==id)。ToList()
和:
db.MortgageRequests.Include(m=>m.Meetings)。其中(m=>m.MortgageRequestID==id)。First().Meetings.ToList()仍然无法获取对象中的数据。在第二个示例中,是否创建另一个DBContext dbo?@Shlo要访问的导航属性的名称是什么?我没有创建DbContext,我假设您已经创建了一个。我尝试访问两个导航属性:SetToUser和SetByUser。这些属性是对UserProfile的引用。我确实有一个dbContext。谢谢。我将查询更改为:
db.Meetings.Include(m=>m.SetByUser).Where(m=>m.MortgageRequest.MortgageRequestID==id.ToList()并且它可以工作。我想这是因为我在查询中包含了导航属性?
public ActionResult GetMeetingMR(int id = 0)
{
    //Load the MeetingPurposes including their dates
    var meetingPurpose = db.MeetingPurposes.Include("Dates").ToList();
    ViewBag.MeetingPurpose = new SelectList(meetingPurpose,
                                            "MeetingPurposeID",
                                            "MeetingPurposeName");
    ViewBag.MRID = id;
    List<Meeting> meetings = (db.MortgageRequests.Find(id)).Meetings.ToList();
    return View(meetings);
}
public ActionResult GetMeetingMR(int id = 0)
{
    var meetingPurpose = db.MeetingPurposes.ToList();
    ViewBag.MeetingPurpose = new SelectList(meetingPurpose,
                                            "MeetingPurposeID",
                                            "MeetingPurposeName");
    ViewBag.MRID = id;
    var meetings = (from mee in db.Meetings.Include("Dates")
                    join mga in dbo.MortgageRequests.Where(m => m.Id == id)
                    on mee.MortgageRequestID equals mga.ID
                    select mee).ToList();
    return View(meetings);
}