C# 查看来自其他模型的数据会导致显示DynamicProxies对象

C# 查看来自其他模型的数据会导致显示DynamicProxies对象,c#,asp.net-mvc,linq,visual-studio,razor,C#,Asp.net Mvc,Linq,Visual Studio,Razor,我目前正在开发一个帮助台系统,并编写一个视图来查看用户的所有票据 票证由父数据组成,如票证类别、开放用户、技术人员等,然后是带有票证记录的子数据。第一个票证注释(在初始创建时添加)是票证描述。在我的观点中的票表中,我只想为每张票显示一个注释(票描述)。这是我的控制器: public ActionResult Index() { var model = from t in db.Tickets join tn in db.TicketNotes on t.

我目前正在开发一个帮助台系统,并编写一个视图来查看用户的所有票据

票证由父数据组成,如票证类别、开放用户、技术人员等,然后是带有票证记录的子数据。第一个票证注释(在初始创建时添加)是票证描述。在我的观点中的票表中,我只想为每张票显示一个注释(票描述)。这是我的控制器:

public ActionResult Index()
{

    var model = from t in db.Tickets
                join tn in db.TicketNotes on t.TicketId equals tn.TicketId
                where t.OpenUserId == new Guid("00000000-0000-0000-0000-000000000000")
                orderby t.OpenDate
                select t;

    return View(model);
}
我的ViewModel:

namespace HelpDesk.WebUI.ViewModel
{
    public class UserTickets
    {
        public int TicketNumber { get; set; }

        public Guid CategoryId { get; set; }

        public virtual Category Category { get; set; }

        public Guid OpenUserId { get; set; }

        public virtual User OpenUser { get; set; }

        public DateTime OpenDate { get; set; }

        public Guid TechnicianId { get; set; }

        public virtual User Technician { get; set; }

        public Guid TicketStatusId { get; set; }

        public virtual TicketStatus TicketStatus { get; set; }

        public Nullable<DateTime> CloseDate { get; set; }

        public string Note { get; set; }

    }
}
和我的建议视图,但我在视图中的这一行上得到一个错误:

@Html.DisplayFor(modelItem => item.TicketNotes.OrderBy(t=t.TicketId).First().TicketText)
这意味着当前上下文中不存在“thename”t。

(可选)在控制器中使用此选项可获得更好的性能,因为它将急切地加载您的票务,而不是惰性地加载它们:

public ActionResult Index()
{

    var model = db.Tickets
                  .Include(t=>t.TicketNotes)
                  .Where(t.OpenUserId == new Guid("00000000-0000-0000-0000-000000000000"))
                  .OrderBy(t=>t.OpenDate);

    return View(model);
}
并在您的视图中使用此选项(这将适用于即时和延迟加载的笔记):


看起来您正在使用实体模型,因此数据的实际类型不是您的
票据
,而是由EntityFramework动态生成的一些数据类型,用于处理实际的加载细节

你可以:

  • 使
    Ticket
    保持为
    Ticket
    。但在这种情况下,您必须加载所有
  • 或者

  • 您的Linq查询有点毫无意义,因为您只选择了票据,而没有选择票据注释。这些笔记稍后会被延迟加载,我在我的原始帖子中添加了更多信息。有人知道我为什么会出错吗?@djblois,如果不是复制错误,那就意味着你忘记了lambda表达式中的尖括号-
    item.TicketNotes.OrderBy(t=t.TicketId)
    应该是
    item.TicketNotes.OrderBy(t=>t.TicketId)
    。谢谢你的工作。很抱歉,我刚刚在新的工作岗位上学习MVC,感到不知所措。我的老板告诉我他要教我,但我完全靠自己学习。@djblois相信我,我很理解你。下一次要更加注意——这不是什么框架特性,而是一个小的打字错误。祝你好运。尤金,我是从上面的另一张海报上抄来的,这是他们的打字错误。一开始我还以为是我的错。
    public ActionResult Index()
        {
    
            var model = db.Tickets
                        .Include(t=>t.TicketNotes)
                        .Where(t.OpenUserId == new Guid("00000000-0000-0000-0000-000000000000"))
                        .OrderBy(t => t.OpenDate);
    
            return View(model);
        }
    
    @Html.DisplayFor(modelItem => item.TicketNotes.OrderBy(t=t.TicketId).First().TicketText)
    
    public ActionResult Index()
    {
    
        var model = db.Tickets
                      .Include(t=>t.TicketNotes)
                      .Where(t.OpenUserId == new Guid("00000000-0000-0000-0000-000000000000"))
                      .OrderBy(t=>t.OpenDate);
    
        return View(model);
    }
    
    @Html.DisplayFor(modelItem => item.TicketNotes.OrderBy(t=t.TicketId).First().TicketText)