Asp.net mvc 将相关实体传递给视图

Asp.net mvc 将相关实体传递给视图,asp.net-mvc,entity-framework,entity-framework-core,Asp.net Mvc,Entity Framework,Entity Framework Core,我有实体“Reserve”、“reservesuser”和默认的“ApplicationUser” public class Reserve { public int ID { get; set; } public string Begin { get; set; } public string End { get; set; } public string Date { get; set; } public string Status {

我有实体“Reserve”、“reservesuser”和默认的“ApplicationUser”

public class Reserve
{        
    public int ID { get; set; }
    public string Begin { get; set; }
    public string End { get; set; }
    public string Date { get; set; }
    public string Status { get; set; } //free , reserved, confirmed, canceled
    public DateTime LastUpdate { get; set; }
    public ICollection<ReserveUser> ReservesUsers { get; set; }
}

public class ReserveUser
{
    [Key]
    public int Id { get; set; }
            
    public string UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual ApplicationUser User { get; set; }

    public int ReserveId { get; set; }
    [ForeignKey("ReserveId")]
    public Reserve Reserve { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public bool IsProfessional { get; set; }
    public ICollection<ReserveUser> ReservesUsers { get; set; }
}
如何将其发送到视图并访问它

我试过:

return View(usersByReserve);
而且不起作用

处理请求时发生未处理的异常

InvalidOperationException:传递到ViewDataDictionary的模型项的类型为“System.Collections.Generic.List`1[Reservation.Models.Reserve]”,但此ViewDataDictionary实例需要类型为“Reservation.Models.Reserve”的模型项。 可保证


当前代码将向视图返回集合
Reserve
类对象(与where子句匹配)。但是您的视图需要一个Reserve类的实例。即使您的where子句是条件导致一条记录,它仍将返回一个项的集合,因为
where
方法返回一个集合

由于要查找单个项(与where子句条件匹配),因此可以使用
FirstOrDefault
方法来获取该项

var usersByReserve = _context.Reserves
            .Where(m => m.ID == id)
            .Include(ru => ru.ReservesUsers)
            .ThenInclude(ap => ap.User)
            .FirstOrDefault();
if(usersByReserve !=null)
{
  return View(usersByReserve);
}
else
{
  //return a "not found message/view"
  return Content("No item found for the id passed");
}
现在,您需要将视图强类型化为Reserve类,然后可以根据需要访问属性

@model Reserve
<h1> @Model.Begin </h1>
@if(Model.ReservesUsers!=null)
{
  <p>Some ReservesUsers found</p>
  @foreach(var u in Model.ReservesUsers)
  {
    <p>@u.UserId </p>
  }
}
else
{
  <p>No ReservesUsers found!</p>
}
@型号保留
@模型,开始
@if(Model.ReservesUsers!=null)
{
发现了一些储备者

@foreach(模型ReservesUsers中的var u) { @u、 用户ID

} } 其他的 { 找不到预订者

}
不起作用吗?你有错误吗?您的视图代码是什么样子的?谢谢Shyju,我只是为了工作做了一些修改,首先我将“@model Reserve”替换为“@model IEnumerable”,然后我添加了一个嵌套的for循环:“@foreach”(模型中的var项){foreach(item.ReservesUsers中的var user){@user.user.Email'}@是的。如果您想在页面中显示多个保留项,那么这将起作用。你不需要第一个或默认的电话。
@model Reserve
<h1> @Model.Begin </h1>
@if(Model.ReservesUsers!=null)
{
  <p>Some ReservesUsers found</p>
  @foreach(var u in Model.ReservesUsers)
  {
    <p>@u.UserId </p>
  }
}
else
{
  <p>No ReservesUsers found!</p>
}