C# 使用EF 6 MVC 5并从多对多关系中检索数据
我在ASP.NET MVC 5和Entity Framework 6中遇到一些问题。C# 使用EF 6 MVC 5并从多对多关系中检索数据,c#,asp.net-mvc,entity-framework,many-to-many,C#,Asp.net Mvc,Entity Framework,Many To Many,我在ASP.NET MVC 5和Entity Framework 6中遇到一些问题。 我的申请有PRODUTO,这些有APLICAO 一个产品可以有多个APLICAO,一个APLICAO可以属于多个产品。所以,这是一种多对多的关系 一些信息: 普罗杜托 public class Produto { public int Id { get; set; } public string Nome { get; set; } public string Descricao { g
我的申请有PRODUTO,这些有APLICAO
一个产品可以有多个APLICAO,一个APLICAO可以属于多个产品。所以,这是一种多对多的关系 一些信息: 普罗杜托
public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public ICollection<Aplicacao> Aplicacoes { get; set; }
}
索引视图
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.Descricao)
</th>
<th>
@Html.DisplayNameFor(model => model.Aplicacoes)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Descricao)
</td>
<td>
@Html.DisplayFor(modelItem => item.Aplicacoes)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
@DisplayNameFor(model=>model.Nome)
@DisplayNameFor(model=>model.descripcao)
@DisplayNameFor(model=>model.Aplicacoes)
@foreach(模型中的var项目){
@DisplayFor(modeleItem=>item.Nome)
@DisplayFor(modeleItem=>item.descripcao)
@DisplayFor(modelItem=>item.Aplicacoes)
@ActionLink(“编辑”,“编辑”,新的{id=item.id})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.id})|
@ActionLink(“删除”,“删除”,新的{id=item.id})
}
我需要帮助来修复检索视图模型的查询,以便在索引视图中显示与一个产品相关的每个应用程序的名称
谢谢,在@Gert Arnold评论我的查询是正确的之后,我发现了“错误”: 在我看来,我已经为从DB检索到的APLICAO的名称包括了另一个foreach。现在我的观点是这样的:
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.Descricao)
</th>
<th>
@Html.DisplayNameFor(model => model.Aplicacoes)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Descricao)
</td>
<td>
<ul>
@foreach (var app in item.Aplicacoes)
{
<li>@app.Nome</li>
}
</ul>
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
@DisplayNameFor(model=>model.Nome)
@DisplayNameFor(model=>model.descripcao)
@DisplayNameFor(model=>model.Aplicacoes)
@foreach(模型中的var项目){
@DisplayFor(modeleItem=>item.Nome)
@DisplayFor(modeleItem=>item.descripcao)
@foreach(item.Aplicacoes中的var应用程序)
{
- @app.Nome
}
@ActionLink(“编辑”,“编辑”,新的{id=item.id})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.id})|
@ActionLink(“删除”,“删除”,新的{id=item.id})
}
顺便说一句,找到一个aplicaco
是一种效率很低的方法。您应该直接从数据库中查询,而不是从首先得到的整个列表中查询。但在主题上:您的模型和查询似乎没有任何问题。您是否检查了执行的SQL?@Gert,我在另一个查询中查询了APLICAO,如何在视图中加入它们?每个产品都可以有许多应用程序。我必须使用viewmodel来连接从数据库检索到的所有数据?
var app = context.Aplicacoes.ToList().Find(a => a.Nome == "Industrial");
var app2 = context.Aplicacoes.ToList().Find(a => a.Nome == "Betoneiras");
var produto = new Produto {Nome = "Produto 1", Descricao = "Descrição", Aplicacoes = new List<Aplicacao>{app, app2}};
context.Produtos.Add(produto);
public ActionResult Index()
{
return View(db.Produtos.Include(x => x.Aplicacoes.Select(y => y.Produtos)).ToList());
}
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.Descricao)
</th>
<th>
@Html.DisplayNameFor(model => model.Aplicacoes)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Descricao)
</td>
<td>
@Html.DisplayFor(modelItem => item.Aplicacoes)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.Descricao)
</th>
<th>
@Html.DisplayNameFor(model => model.Aplicacoes)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Descricao)
</td>
<td>
<ul>
@foreach (var app in item.Aplicacoes)
{
<li>@app.Nome</li>
}
</ul>
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}