Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

220
Visualizações
Entityframework > Obtener entidad rastreada por clave (referencia diferente)

Necesito la funcionalidad para recuperar una entidad rastreada por clave sin una llamada SQL a la base de datos. Así que necesito algo como .Find pero si no se rastrea, se devuelve NULL .

La razón por la que necesito esto es porque el siguiente código arroja:

 public void Test() { var id = 5; var a = new Entity { Id = id }; _ctx.Entry(a).State = EntityState.Added; var b = new Entity { Id = id }; var bEntry = _ctx.Entry(b); // Delete entity // When it was already added in this 'lifetime' detach it again (since it's not saved in the DB yet) if (bEntry.State == EntityState.Added) bEntry.State = EntityState.Detached; else bEntry.State = EntityState.Deleted; var c = new Entity { Id = id }; var cEntry = _ctx.Entry(c); // Add entity // When it was already deleted in this 'lifetime' detach it again (since it's not removed in the DB yet) if (cEntry.State == EntityState.Deleted) cEntry.State = EntityState.Detached; else cEntry.State = EntityState.Added; var d = new Entity { Id = id }; var dEntry = _ctx.Entry(d); }

Si nunca creara nuevas entidades pero siempre usara a archivo . Este código funcionará. La razón por la que no funciona ahora es porque EF realiza un seguimiento interno de las entidades en un diccionario mediante una 'comparación por referencia' ( https://github.com/dotnet/efcore/blob/9ac01d6035c76626d89aa1a3cd8d200db2c3c0e1/src/EFCore/ChangeTracking/ Interno/EntityReferenceMap.cs#L103 )

Como resultado, los usos de TryGetValue EF serán false y creará una nueva entrada con el estado Detached . Y luego, el código fallará porque intento agregar una entidad que ya está rastreada.

Este problema anterior se resolvería si pudiera obtener la entidad rastreada, ya que tendrían la misma referencia. Pero parece que no encuentro una manera de acceder al mismo código que ocurre en .Find() . En teoría, podría usar la propiedad .Local u obtenerla usando ChangeTracker.Entries() pero dado que estas son solo listas regulares, el rendimiento para buscar la entrada está tardando demasiado.

Sé que esta es una pregunta muy específica. Pero realmente parece que no encuentro nada. Es un poco vergonzoso rendirse ya que internamente EF sabe lo que necesito.

Brecht

over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda