如何在Entity Framework中使用两个模型类进行联接

时间:2019-06-13 12:11:02

标签: c# entity-framework asp.net-core

我有两个模型类:

Empresa:

 public class Empresa
 {
        public int EmpresaId { get; set;}
        public string Nome { get; set; }
        public string Cep { get; set; }
        public ICollection<Funcionario> Funcionarios { get; set; }
 }

功能键

 public class Funcionario
 {
        public int FuncionarioId { get; set; }
        public string Nome { get; set; }
        public string Cargo { get; set; }
        //Foreign Key
        public int EmpresaId { get; set; }
        public Empresa Empresas { get; set; }
}

我有一个EmpresaController,有一个方法get从Empresa返回所有数据:

//GET: api/empresa
[HttpGet]
public async Task<ActionResult<IEnumerable<Empresa>>> getEmpresas()
{
    return await _context.Empresa.ToListAsync();
}

我需要在实体框架中生成此查询的结果,我该怎么做?

SELECT * 
FROM dbo.Empresa e
JOIN Funcionario f ON (e.EmpresaId = f.EmpresaId)

@编辑:

格式错误的json:

errorjson

我认为缺少}]?

3 个答案:

答案 0 :(得分:0)

使用Linq Join查询

return await (from e in _context.Empresa
              join f in _context.Funcionario on e.EmpresaId equals f.EmpresaId
              select e).ToListAsync();

答案 1 :(得分:0)

您还需要在DbContext类中设置此关系。

public class ApplicationDbContext {
    protected override void OnModelCreating(ModelBuilder builder) {
        // your other code here
        builder.Entity<Funcionario>(entity => {
            entity.HasOne(e => e.Empresa)
                .WithMany(e => e.Funcionarios);
        });
        // rest of your code
    }
}

答案 2 :(得分:0)

您可以只使用一个include来实现所需的内容(它在内部执行连接)

[HttpGet]
public async Task<ActionResult<IEnumerable<Empresa>>> getEmpresas()
{
    var empresas =  await _context.Empresas.Include(t=> t.Funcionarios).ToListAsync();
    return Ok(empresas);
}