diegosampaiorj
diegosampaiorj

Reputation: 21

Two dbcontexts cause an error "value cannot be null. parameter name entitytype"

I have 2 DbContexts in my application, and need to do a join in 2 tables that are each one in a different DbContext; I get this error

value cannot be null. parameter name entitytype

When I try to join 2 tables of the same context, this error does not happen.

var VerificaExistenciaSinistro = sinistroContext.SnsAviso
  .Join(
    sinistroContext.SnsNumAviso, 
    sinistro => sinistro.NumApo,
    aviso    => aviso.NumApo,
    (sinistro, aviso) => new { 
      sinistroV = sinistro, 
      avisoV = aviso })
  .Where(c => c.sinistroV.CodItm == c.avisoV.CodItm &&
    c.sinistroV.NumApo == c.avisoV.NumApo && 
    c.sinistroV.NumAvs == c.avisoV.SeqNumAvs)
  .Join(sgsContext.EmsEmissao,
    sinistro1 => sinistro1.sinistroV.CodCtrtAvs,
    emissao   => emissao.CodCtrt,
    (sinistro1, emissao) => new { 
      sinistroC = sinistro1, 
      emissaoC = emissao })
  .Where(c => c.sinistroC.sinistroV.CodCtrtAvs == c.emissaoC.CodCtrt && 
    c.emissaoC.CodEmis == c.sinistroC.avisoV.CodEms)
  .Where(x => x.sinistroC.sinistroV.NumApo == apolice &&
    x.emissaoC.StsEmis == emissao && 
    x.emissaoC.NumEndosso ==endosso && 
    x.sinistroC.sinistroV.CodItm == cod_itm && 
    x.sinistroC.sinistroV.CodCbe == cbeCod)
  .Select(x => x.sinistroC)
  .ToList();

Upvotes: 2

Views: 1358

Answers (1)

Kovid Purohit
Kovid Purohit

Reputation: 288

It generally occurs when u query data from two dbcontext using IQueryable

I encountered the same issue when I was using two dbContext. The solution which I found was. If u are using join between two tables then load any one table's data first to a variable/Object so that It becomes IEnumerable or IList and then do join with that variable/Object to the another table of another dbContext

Example

    var FirstDbContextTable = sinistroContext.SnsAviso
  .Join(
    sinistroContext.SnsNumAviso, 
    sinistro => sinistro.NumApo,
    aviso    => aviso.NumApo,
    (sinistro, aviso) => new { 
      sinistroV = sinistro, 
      avisoV = aviso })
  .Where(c => c.sinistroV.CodItm == c.avisoV.CodItm &&
    c.sinistroV.NumApo == c.avisoV.NumApo && 
    c.sinistroV.NumAvs == c.avisoV.SeqNumAvs).ToList();


var result=FirstDbContextTable.Join(sgsContext.EmsEmissao,
    sinistro1 => sinistro1.sinistroV.CodCtrtAvs,
    emissao   => emissao.CodCtrt,
    (sinistro1, emissao) => new { 
      sinistroC = sinistro1, 
      emissaoC = emissao })
  .Where(c => c.sinistroC.sinistroV.CodCtrtAvs == c.emissaoC.CodCtrt && 
    c.emissaoC.CodEmis == c.sinistroC.avisoV.CodEms)
  .Where(x => x.sinistroC.sinistroV.NumApo == apolice &&
    x.emissaoC.StsEmis == emissao && 
    x.emissaoC.NumEndosso ==endosso && 
    x.sinistroC.sinistroV.CodItm == cod_itm && 
    x.sinistroC.sinistroV.CodCbe == cbeCod)
  .Select(x => x.sinistroC)
  .ToList();

Upvotes: 1

Related Questions