c# - 在 ASP.NET MVC EF 中构建 CRUD 功能时,如何将多对多联结表显示为实体之一的一部分?
问题描述
我正在尝试使用 EF 为一个项目搭建 CRUD 功能,其中我有一个与另一个实体具有多对多关系的实体。这在大多数情况下都可以正常工作,但我不知道如何将多对多关系数据呈现为实体之一的一部分。
我要使用的实体的脚手架模型如下所示
public partial class Composition
{
public Composition()
{
CompFish = new HashSet<CompFish>();
}
public int CompositionId { get; set; }
public int AccountId { get; set; }
public int RodId { get; set; }
public int ReelId { get; set; }
public string Name { get; set; }
public virtual Account Account { get; set; }
public virtual Reel Reel { get; set; }
public virtual Rod Rod { get; set; }
public virtual ICollection<CompFish> CompFish { get; set; }
}
这个模型有一个 HashSet 类型,它是连接表的脚手架模型,它保存与另一个实体CompFish
之间的关系,看起来像这样Composition
Fish
public partial class CompFish
{
public int CompositionId { get; set; }
public int FishId { get; set; }
public virtual Composition Composition { get; set; }
public virtual Fish Fish { get; set; }
}
所以它有一个来自它连接的每个表的 Id 和一个实体模型。
当我想在我的中显示属性的一部分时,我Fish
做了以下事情;CompFish
HashSet
view
Composition
修改了控制器以包括CompFish
public async Task<IActionResult> Index()
{
var projectFishContext = _context.Composition.Include(c => c.Account).Include(c => c.Reel).Include(c => c.Rod).Include(c => c.CompFish);
return View(await projectFishContext.ToListAsync());
}
foreach
并在我希望显示数据的视图中添加了一个循环。
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Account.Mail)
</td>
<td>
@Html.DisplayFor(modelItem => item.Reel.Brand)
</td>
<td>
@Html.DisplayFor(modelItem => item.Rod.Brand)
</td>
<td> // LOOK HERE
@foreach (var i in item.CompFish)
{
@Html.DisplayFor(modelItem => i.Fish.Species)
}
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.CompositionId">Edit</a> |
<a asp-action="Details" asp-route-id="@item.CompositionId">Details</a> |
<a asp-action="Delete" asp-route-id="@item.CompositionId">Delete</a>
</td>
</tr>
}
我@Html.DisplayFor(modelItem => i.Fish.Species)
用来显示数据的方式很可能是错误的,由于我的主要脑力,我尝试了很多不同的方法,这就是它目前的样子。我已经有一段时间了,不知道怎么做去做吧...
任何帮助将不胜感激!
解决方案
public async Task<IActionResult> Index()
{
var projectFishContext = _context.Composition.Include(c => c.Account).Include(c => c.Reel).Include(c => c.Rod).Include(c => c.CompFish).ThenInclude(c => c.Fish);
return View(await projectFishContext.ToListAsync());
}
我错过了ThenInclude
在我的收藏对象上添加一个
推荐阅读
- batch-file - 如何将变量保存到批处理文件?
- java - spring:如何将角色应用于现有的 JWT 令牌
- python - 如何使这个不断变化的数据框更快?
- c# - .NET Core Web API - 无法插入记录调用 Oracle 存储过程
- css - 我如何将 Material-UI 托管样式应用于非 Material-ui、非反应元素?
- javascript - 在 React 中使用 JS 在 mouseOver 上播放视频
- swift - 加载图像时 UITableViewCell 显示错误的图像
- javascript - 将对象数组中的一个属性映射到不同对象数组中的另一个对象
- docker - 如何从 docker 主机连接在 docker 容器上运行的套接字服务器
- c# - 当您需要支持多个 ORM 或源时,是通用存储库还是特定存储库?