我有一个主要模型Produto,这个模型与其他模型有一些多对多的关系。
例如:一个产品可以有许多Aplicacoes,一个Aplicacao可以属于许多Produtos;我想在索引视图中显示我的所有Produto,并将它们与Aplicacao和Opcional相关联。
我的问题是检索所有这些数据。当我只使用它的Aplicacao查询Produto时,它有效,但我不知道如何加入相关的Opcional。
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; }
public ICollection<Opcional> Opcionais { get; set; }
}
Aplicacao
public class Aplicacao
{
public int Id { get; set; }
public string Nome { get; set; }
public ICollection<Produto> Produtos { get; set; }
}
Opcional
public class Opcional
{
public int Id { get; set; }
public string Descricao { get; set; }
public ICollection<Produto> Produtos { get; set; }
}
Contexto
public DbSet<Produto> Produtos { get; set; }
public DbSet<Aplicacao> Aplicacoes { get; set; }
public DbSet<Opcional> Opcionais { get; set; }
modelBuilder.Entity<Produto>()
.HasMany(c => c.Aplicacoes)
.WithMany(p => p.Produtos)
.Map(
m =>
{
m.MapLeftKey("ProdutoId");
m.MapRightKey("AplicacaoId");
m.ToTable("ProdutoAplicacao");
});
modelBuilder.Entity<Produto>()
.HasMany(c => c.Opcionais)
.WithMany(p => p.Produtos)
.Map(
m =>
{
m.MapLeftKey("ProdutoId");
m.MapRightKey("OpcionalId");
m.ToTable("ProdutoOpcional");
});
我想知道如何查询所有Produto,他们从DB中关联Aplicacao和Opcional,以便我可以在我的索引视图中显示它们?
答案 0 :(得分:2)
您可以使用linq将关联实体加载到Entity keyworkd Include()。这将加载Producto和所有相关的Aplicacoes和Opcionais:
var productosList = MyDbContext.Produtos.Include(x => x.Aplicacoes)
.Include(x => x.Opcionais).ToList();
或者通过使用关键字virtual:
装饰您的实体类来延迟加载相关实体public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public virtual ICollection<Aplicacao> Aplicacoes { get; set; }
public virtual ICollection<Opcional> Opcionais { get; set; }
}