Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

221
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!