如何解决如何在ASP.NET Core中加载具有多对多关系的数据?
我正在ASP.NET Core应用程序中处理多对多关系。通过在线阅读资料,我了解到目前还没有官方的支持,因此需要一个中间类来使其全部正常工作。
我遇到的问题是,一旦创建了“多对多”关系,我就不知道如何最好地在视图中显示数据,而我正努力使用此特定设置遍历所有内容。 / p>
在我的示例中,有两个表Part
和Supplier
,一个Part
可以有很多Supplier
,就像一个Supplier
可以有很多{{1 }}。
我做的第一件事是创建两个实体类Part
和Part
Part.cs
Supplier
Supplier.cs
public class Part
{
public int PartId { get; set; }
public string PartName { get; set; }
public string PartNumber { get; set; }
public string ShortDescription { get; set; }
public string LongDescription { get; set; }
public string Category { get; set; }
//Intermediate entity
public IList<PartSupplier> PartSupplier { get; set; }
}
从上面的代码中,您将看到我放置了一个中间表,该表创建了称为public class Supplier
{
public int SupplierId { get; set; }
public string SupplierName { get; set; }
public string Website { get; set; }
public int? Telephone { get; set; }
public string Email { get; set; }
//Intermediate entity
public IList<PartSupplier> PartSupplier { get; set; }
}
的多对多关系
PartSupplier.cs
PartSupplier
这时,我转到数据上下文,并覆盖代码的模型构建部分以使用Fluent API。
Context.cs
public class PartSupplier
{
public int PartId { get; set; }
public Part Part { get; set; }
public int SupplierId { get; set; }
public Supplier Supplier { get; set; }
}
好的,到目前为止很好。现在,我需要在视图中显示此信息,特别是在该视图中,我想显示所有零件,并在它们旁边显示可以从中购买零件的所有可用供应商。
尽管我以以下方式加载数据,但是在这里我不太确定如何构造查询。我应该调用中介表还是先调用protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<PartSupplier>().HasKey(ps => new { ps.PartId,ps.SupplierId });
base.OnModelCreating(builder);
}
public DbSet<Part> Parts { get; set; }
public DbSet<Supplier> Suppliers { get; set; }
public DbSet<PartSupplier> PartSuppliers { get; set; }
,然后再添加Part
?我不确定
PartController.cs
Supplier
Index.cshtml
public IActionResult Index()
{
var data = _context.Part.Include(p => p.Supplier);
return View(data);
}
我想我已经快知道了,但确实希望获得一些帮助来克服最后的障碍。非常感谢
解决方法
Index.cshtml
中缺少级联关系,您需要添加ThenInclude
。
public IActionResult Index()
{
var data = _context.Parts.Include(x => x.PartSupplier)
.ThenInclude(y=>y.Supplier);
return View(data);
}
然后在Index.cshtml中。
<table class="table">
@foreach (var part in Model)
{
<tr>
<td>
<a asp-action="Edit" asp-route-id="@part.PartId" asp-controller="Part">@part.PartName</a>
</td>
<td>
@part.PartNumber
</td>
<td>
@part.ShortDescription
</td>
<td>
<ul>
@* Here has been changed. *@
@foreach(var supplier in part.PartSupplier)
{
<li>@supplier.Supplier.SupplierName @supplier.Supplier.Website</li>
}
</ul>
</td>
</tr>
}
</table>
在数据库中,我插入了一些数据,例如Part
和PartSupplier
。
结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。