我在ASP.NET MVC 5和Entity Framework 6中遇到了一些麻煩。
我的應用程序有PRODUTO,它們有APLICACAO。
一個PRODUTO可以有許多APLICACAO,一個APLICACAO可以屬於很多PRODUTO。所以,這是一種多對多的關係。使用EF 6 MVC 5和檢索多對多關係中的數據
一些信息:
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和流利的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創建表的d橋表,迄今爲止非常好。
在我的初始化程序,我創建了一個產品像這樣:
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表。
但是,當我嘗試在產品的索引視圖中加載這些信息時,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>
我需要幫助修復retrive模型視圖的查詢,以便我可以顯示有關各一個Aplicacao的名字產品放入我的索引視圖。
感謝
順便說一句,這是一個相當低效的方法找到一個'Aplicacao'。你應該直接從數據庫中查詢它,而不是從你首先得到的整個列表中查詢。但話題上:你的模型和查詢沒有什麼問題。你檢查執行的SQL嗎? –
@Gert,我在另一個查詢中查詢Aplicacao,我該如何將它們加入視圖?每個Produto可以有很多Aplicacao。 我必須使用視圖模型來加入從數據庫中檢索的所有數據? – JDalri