我在ASP.NET MVC 5和Entity Framework 6中遇到了一些麻烦
我的应用程序有PRODUTO,这些都有APLICACAO。
一个PRODUTO可以有许多APLICACAO,一个APLICACAO可以属于许多PRODUTO。所以,这是一种多对多的关系。
一些信息:
Produto
public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public ICollection<Aplicacao> Aplicacoes { get; set; }
}
Aplicacao
public class Aplicacao
{
public int Id { get; set; }
public string Nome { get; set; }
public ICollection<Produto> Produtos { get; set; }
}
在上下文中,我设置了DbSets和Fluent API
public DbSet<Produto> Produtos { get; set; }
public DbSet<Aplicacao> Aplicacoes { get; set; }
modelBuilder.Entity<Produto>()
.HasMany(c => c.Aplicacoes)
.WithMany(p => p.Produtos)
.Map(
m =>
{
m.MapLeftKey("ProdutoId");
m.MapRightKey("AplicacaoId");
m.ToTable("ProdutoAplicacao");
});
比EF创建表和桥表,到目前为止一切顺利。
在我的初始化程序中,我创建了一个这样的产品:
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);
然后,EF填充APLICACAO和PRODUTO表,并填充PRODUTOAPLICACAO表。
但是,当我尝试在Product的Index视图中加载这些信息时,Aplicacoes是空的,我无法弄清楚如何解决这个问题。
ProdutoController
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>
我需要帮助来修复查询视图的模型,以便我可以在一个索引视图中显示与一个产品相关的每个Aplicacao的名称。
由于
答案 0 :(得分:0)
在@Gert Arnold评论我的查询是对的之后,我发现&#34;错误&#34;:
在我看来,我已经包含了另一个从DB检索到的Aplicacao名称的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>
}