1

我遇到了一个非常奇怪(也很烦人)的问题:在 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);

    }
4

1 回答 1

0

在您的问题中包含您的标题,我猜您在没有附加调试器的情况下(还)没有遇到问题。
正如其他人所评论的那样,这是由于LazyLoading.
有时可能会出现此问题,因为在渲染View实体容器时正在处理,很可能是因为它是由调用容器的析构函数的 GarbageCollector 收集的。

如果您希望访问您的实体,您View可以Include使用ObjectSet. 假设MeetingPurposes有一个关联EntitySetDates:如果您希望将它们包含在加载操作中,您可以执行以下操作: db.MeetingPurposes.Include("Dates").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);
}

如果您希望这样做,Meetings并且 Meetings 有你们中的一个EntitySet人,Dates可以这样做:

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

不太确定您的Find扩展方法是什么,所以我使用了Whereon MortgageRequests.

于 2012-10-28T19:59:58.723 回答