Bom dia Comunidade.
Estou precisando da ajuda de vocês. Estou desenvolvendo um programa para um curso de idiomas, mas não estou conseguindo fazer uma “consulta por nome”. O software foi desenvolvido em camadas Web, Dal, Bll e DTO, com o framework Dapper. A classe Aluno tem as seguintes chaves estrangeiras => Curso, Turma, Turno e Nível. Abaixo os dados. Obrigado pela ajuda.
DAL
//Método para consultar todos os registros
public List<AlunoDTO> ListarTodos()
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query =
"Select * From Aluno a "
+ "inner join Curso c on c.IdCurso = a.IdCurso "
+ "inner join Turma t on t.IdTurma = a.IdTurma "
+ "inner join Turno tur on tur.IdTurno = a.IdTurno "
+ "inner join Nivel n on n.IdNivel = a.IdNivel "
+ "inner join Funcionario f on f.IdFuncionario = a.IdFuncionario "
+ "inner join Responsavel r on r.IdResponsavel = a.IdResponsavel "
+ "order by IdAluno";
return conn.Query(query, (AlunoDTO a, CursoDTO c, TurmaDTO t, TurnoDTO tur, NivelDTO n, FuncionarioDTO f, ResponsavelDTO r) =>
{
a.Curso = c; //Mapeando a associação
a.Turma = t; //Mapeando a associação
a.Turno = tur; //Mapeando a associação
a.Nivel = n; //Mapeando a associação
a.Funcionario = f; //Mapeando a associação
a.Responsavel = r; //Mapeando a associação
return a; //Tipo que será retornado pela query
},
splitOn: "IdCurso, IdTurma, IdTurno, IdNivel, IdFuncionario, IdResponsavel" //FK -> Chaves estrangeiras
).ToList();
}
}
//Método para consultar todos os registros por nome
public List<AlunoDTO> ListarTodosPorNome(string nome)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query =
"Select count(Nome) From Aluno a "
+ "inner join Curso c on c.IdCurso = a.IdCurso "
+ "inner join Turma t on t.IdTurma = a.IdTurma "
+ "inner join Turno tur on tur.IdTurno = a.IdTurno "
+ "inner join Nivel n on n.IdNivel = a.IdNivel "
+ "where Nome = @Nome";
return conn.Query(query, (AlunoDTO a, CursoDTO c, TurmaDTO t, TurnoDTO tur, NivelDTO n) =>
{
a.Curso = c; //Mapeando a associação
a.Turma = t; //Mapeando a associação
a.Turno = tur; //Mapeando a associação
a.Nivel = n; //Mapeando a associação
return a; //tipo que será retornado pela query
},
new { Nome = $"%{nome}%" }, splitOn: "IdCurso, IdTurma, IdTurno, IdNivel" //FK -> Chaves estrangeiras
).ToList();
}
}
BLL
public class AlunoBLL
{
public void CadastrarAluno(AlunoDTO aluno)
{
AlunoDAL alunod = new AlunoDAL();
//Verifico se o nome do aluno já está cadastrado
if (!alunod.NomeJaExiste(aluno.Nome))
{
alunod.Inserir(aluno); //Gravando
}
else
{
//Lanço uma exeção
throw new Exception($"O registro {aluno.Nome} já existe no sistema.");
}
}
public List<AlunoDTO> ConsultarAlunos()
{
AlunoDAL alunod = new AlunoDAL();
return alunod.ListarTodos();
}
public List<AlunoDTO> ConsultarAlunosPorNome(string nome)
{
AlunoDAL alunod = new AlunoDAL();
return alunod.ListarTodosPorNome(nome);
}
}
CONTROLLER
//GET: Aluno/Consulta
public ActionResult Consulta()
{
//Inicializando a lista da classe model
List<AlunoConsultaModel> lista = new List<AlunoConsultaModel>();
try
{
AlunoBLL alunob = new AlunoBLL();
foreach (AlunoDTO aluno in alunob.ConsultarAlunos())
{
AlunoConsultaModel model = new AlunoConsultaModel();
model.Curso = new CursoConsultaModel();
model.Turma = new TurmaConsultaModel();
model.Turno = new TurnoConsultaModel();
model.Nivel = new NivelConsultaModel();
model.Funcionario = new FuncionarioConsultaModel();
model.Responsavel = new ResponsavelConsultaModel();
model.IdAluno = aluno.IdAluno;
model.Nome = aluno.Nome;
model.Curso.IdCurso = aluno.Curso.IdCurso; // --> Foreign key
model.Curso.Nome = aluno.Curso.Nome;
model.Turma.IdTurma = aluno.Turma.IdTurma; // --> Foreign key
model.Turma.Nome = aluno.Turma.Nome;
model.Turno.IdTurno = aluno.Turno.IdTurno; // --> Foreign key
model.Turno.Nome = aluno.Turno.Nome;
model.Nivel.IdNivel = aluno.Nivel.IdNivel; // --> Foreign key
model.Nivel.Numero = aluno.Nivel.Numero;
model.Funcionario.IdFuncionario = aluno.Funcionario.IdFuncionario; // --> Foreign key
model.Funcionario.Nome = aluno.Funcionario.Nome;
model.Responsavel.IdResponsavel = aluno.Responsavel.IdResponsavel; // --> Foreign key
model.Responsavel.Nome = aluno.Responsavel.Nome;
lista.Add(model);
}
}
catch (Exception e)
{
TempData["Mensagem"] = e.Message;
}
//Enviando a lista para a página
return View(lista);
}
//GET: Aluno/ConsultaPorNome
[HttpGet]
public ActionResult ConsultaPorNome(string nome)
{
//Inicializando a lista da classe model
List<AlunoConsultaPorNomeModel> lista = new List<AlunoConsultaPorNomeModel>();
try
{
AlunoBLL alunob = new AlunoBLL();
foreach (AlunoDTO aluno in alunob.ConsultarAlunos())
{
AlunoConsultaPorNomeModel model = new AlunoConsultaPorNomeModel();
model.Curso = new CursoConsultaModel();
model.Turma = new TurmaConsultaModel();
model.Turno = new TurnoConsultaModel();
model.Nivel = new NivelConsultaModel();
model.IdAluno = aluno.IdAluno;
model.Nome = aluno.Nome;
model.Curso.IdCurso = aluno.Curso.IdCurso; // --> Foreign key
model.Curso.Nome = aluno.Curso.Nome;
model.Turma.IdTurma = aluno.Turma.IdTurma; // --> Foreign key
model.Turma.Nome = aluno.Turma.Nome;
model.Turno.IdTurno = aluno.Turno.IdTurno; // --> Foreign key
model.Turno.Nome = aluno.Turno.Nome;
model.Nivel.IdNivel = aluno.Nivel.IdNivel; // --> Foreign key
model.Nivel.Numero = aluno.Nivel.Numero;
lista.Add(model);
}
}
catch (Exception e)
{
TempData["Mensagem"] = e.Message;
}
//Enviando a lista para a página
return View(lista);
}
MODEL
namespace SisCursoWeb.Site.Models
{
public class AlunoConsultaPorNomeModel : PessoaDTO
{
public int IdAluno { get; set; }
public string Nome { get; set; }
public CursoConsultaModel Curso { get; set; }
public TurmaConsultaModel Turma { get; set; }
public TurnoConsultaModel Turno { get; set; }
public NivelConsultaModel Nivel { get; set; }
public FuncionarioConsultaModel Funcionario { get; set; }
public ResponsavelConsultaModel Responsavel { get; set; }
}
}
VIEW
@model List<SisCursoWeb.Site.Models.AlunoConsultaPorNomeModel>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="card card-body bg-dark">
<h2 class="text-white">Consultar Aluno por Nome</h2>
<hr/>
</div>
<div class="row">
<div class="col-md-4">
<label>Pesquisar Aluno por Nome:</label>
@using (Html.BeginForm("ConsultaPorNome",
"Aluno",
FormMethod.Get))
{
@Html.TextBox("nome")
<input type="text" value="Consultar" class="btn btn-success btn-sm"/>
}
<br />
</div>
</div>
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th class="bg-info text-white">Código</th>
<th class="bg-info text-white">Nome do Aluno</th>
<th class="bg-info text-white">Curso</th>
<th class="bg-info text-white">Turma</th>
<th class="bg-info text-white">Turno</th>
<th class="bg-info text-white">Nível</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.IdAluno</td>
<td>@item.Nome</td>
<td>@item.Curso.Nome</td>
<td>@item.Turma.Nome</td>
<td>@item.Turno.Nome</td>
<td>@item.Nivel.Numero</td>
</tr>
}
</tbody>
<tfoot>
<tr>
<td colspan="6">Quantidade de Registros: @Model.Count</td>
</tr>
</tfoot>
</table>
<div>
<b>@TempData["Mensagem"]</b>
<br />
</div>
Quando clico no botão o programa não faz nada como tela acima. Obrigado pela ajuda.