I'm a beginner in the Entity Framework and soon got a maintenance software that uses Entity.
I need to create a report and do the following SQL query using Entity:
select p.RA, p.Nome, p.Modulo, a.Descricao from inscricao as i, Participante as p, Atividade as a
where i.ParticipanteId = p.ParticipanteId and
i.AtividadeId = a.AtividadeId
order by p.Modulo
And in the Controller I use the following method "tried" to do the search quoted above using Entity.
public ActionResult ParticipantesInscritosAtividade(RelatorioParticipantesInscritosAtividadeVM ViewModel) {
if (ModelState.IsValid)
{
var participantes = db.Inscricoes
.Join(db.Participantes, ins => ins.ParticipanteId, pa => pa.ParticipanteId, (ins, pa) => new { ins, pa })
.Join(db.Atividades, ins1 => ins1.ins.AtividadeId, atv => atv.AtividadeId, (ins1, atv) => new { ins1, atv })
.Select(query => new
{
ParticipanteId = query.ins1.pa.ParticipanteId,
RA = query.ins1.pa.RA,
Aluno = query.ins1.pa.Nome,
AtividadeId = query.atv.AtividadeId,
Atividade = query.atv.Titulo,
Modulo = query.ins1.pa.Modulo
}).ToList();
if(participantes.Count() == 0) {
ViewModel.Mensagens.Add(new MensagemVM { Mensagem = MessageUtils.MESSAGE_NO_REPORT_DATA, TipoMensagem = MensagemVM.TipoMensagemEnum.Warning });
}
else
{
foreach (var p in participantes)
{
ViewModel.Participantes.Add(new RelParticipantesInscritosAtividadeVM { RA = p.ins1.pa.RA.Value, Nome = p.ins1.pa.Nome , Modulo = p.ins1.pa.Modulo.v });
}
}
}
PrepararRelatorioParticipantesInscritosAtividadeViewModel(ViewModel);
return View(ViewModel);
}
When I do this the ModelState.isValid returns that the object can not receive a null value.
My model looks like this:
public class RelParticipantesInscritosAtividadeVM
{
[Display(Name = "R.A.")]
public long RA { get; set; }
[Display(Name = "Nome")]
public string Nome { get; set; }
[Display(Name = "Modulo")]
public int Modulo { get; set; }
}
There is no required field and the Model.isValid still gives the error.
My SQL is just an example of what I need to do, using Join I performed the query but it is not returning the correct values, I ask for help translating my SQL to Entity,
public class RelatorioParticipantesInscritosAtividadeVM
{
public RelatorioParticipantesInscritosAtividadeVM()
{
this.Participantes = new List<RelParticipantesInscritosAtividadeVM>();
this.Mensagens = new List<MensagemVM>();
}
[DataType(DataType.DateTime)]
[Display(Name = "Data")]
// [Required(ErrorMessage = "Campo obrigatório")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}", ApplyFormatInEditMode = true)]
[UIHint("DataGeral")]
public DateTime Data { get; set; }
[Display(Name = "Período")]
// [Required(ErrorMessage = "Campo obrigatório")]
public Rel2PeriodoEnumVM Periodo { get; set; }
public SelectList PeriodosList { get; set; }
[Display(Name = "Curso")]
// [Required(ErrorMessage = "Campo obrigatório")]
public string CursoId { get; set; }
public SelectList CursosList { get; set; }
[Display(Name = "Atividade")]
// [Required(ErrorMessage = "Campo obrigatório")]
public String AtividadeId { get; set; }
public SelectList AtividadeList { get; set; }
[Display(Name = "Termo")]
// [Required(ErrorMessage = "Campo obrigatório")]
public short Termo { get; set; }
public SelectList TermosList { get; set; }
public IList<RelParticipantesInscritosAtividadeVM> Participantes { get; set; }
public IList<MensagemVM> Mensagens { get; set; }
// public IList<RelAtividadeVM> Atividade { get; set; }
}
}
As suggested, I created a breakpoint on the requested line but it is stated that the variable does not exist in the current context. Going to the next line (F11) gives this infamous error:
The null object must have a value.
Description: An unhandled exception occurred during the execution of the current Web request. Examine the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: The null object should have a value.
Source Error:
Line 113: {Line 114: Line 115: var errors = ModelState.Values.SelectMany (v => v.Errors); Line 116: if (ModelState.IsValid) Line 117: {