Eliminar objetos cargados y descargados por ID en EntityFrameworkCore

Tengo un método que recibe unIEnumerable<Guid> de ID a los objetos que quiero eliminar. Un método sugerido es el siguiente

foreach(Guid id in ids)
{
  var tempInstance = new MyEntity { Id = id };
  DataContext.Attach(tempInstance); // Exception here
  DataContext.Remove(tempInstance);
}

Esto funciona bien si los objetos no están cargados en la memoria. Pero mi problema es que cuando ya están cargados, entonces elAttach método arroja unInvalidOperationException - The instance of entity type 'MyEntity' cannot be tracked because another instance with the key value 'Id:...' is already being tracked. Lo mismo sucede si usoDataContext.Remove sin llamarAttach.

foreach(Guid id in ids)
{
  var tempInstance = new MyEntity { Id = id };
  DataContext.Remove(tempInstance); // Exception here
}

No quiero usarDataContext.Find para tomar la instancia de un objeto ya cargado porque eso cargará el objeto en la memoria si aún no está cargado.

No puedo usarDataContext.ChangeTracker para encontrar objetos ya cargados porque solo los objetos con estado modificado aparecen allí y mis objetos pueden cargarse y no modificarse.

El siguiente enfoque arroja lo mismoInvalidOperationException al configurarEntityEntry.State, incluso cuando anuloGetHashCode yEquals enMyEntity para garantizar que las búsquedas en el diccionario los vean como el mismo objeto.

foreach(Guid id in ids)
{
  var tempInstance = new MyEntity { Id = id };
  EntityEntry entry = DataContext.Entry(tempInstance);
  entry.State == EntityState.Deleted; // Exception here
}

La única forma hasta ahora que he encontrado es que puedo lograr eliminar objetos por ID sin saber si el objeto es el siguiente:

foreach(Guid id in ids)
{
  var tempInstance = new MyEntity { Id = id };
  try
  {
    DataContext.Attach(tempInstance); // Exception here
  }
  catch (InvalidOperationException)
  {
  }
  DataContext.Remove(tempInstance);
}

Es extraño que pueda llamarDataContext.Remove(tempInstance) sin error después de experimentar una excepción al intentarAttach pero en este punto funciona sin excepción y también elimina las filas correctas de la base de datos cuandoDataContext.SaveChanges es ejecutado.

No me gusta atrapar la excepción. ¿Hay una "buena" forma de lograr lo que quiero?

Nota: Si la clase tiene una autorreferencia, debe cargar los objetos en la memoria para que EntityFrameworkCore pueda determinar en qué orden eliminar los objetos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta