1

I encountered a very strange (and annoying) issue: in MVC 4 web application while loading data from the database and using a foreach on the Model within the view:

@foreach (var meeting in Model)

i have a breakpoint in the method's beginning and examining the object meeting i see that it misses some data (reference to other tables). if I open (+) other object within meeting the missing data appears.

Why?

Thanks!

here is my controller method:

        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できます。に関連付けられているとしましょう:それらをloadoperationに含めたい場合は、次のようにすることができます。 IncludeObjectSetMeetingPurposesEntitySetDatesdb.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、MeetingsEntitySetDatesあなたができることがあるなら:

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 に答える