estoy en el proceso de escribir un gestor de consulta para una aplicación de Windows Forms que, entre otras cosas, tiene que ser capaz de entregar resultados de búsqueda en tiempo real para el usuario, ya que está entrando en una consulta (piense en los resultados en vivo de Google, aunque obviamente en un entorno de cliente grueso en lugar de la web). Dado que los resultados tienen que empezar a llegar, ya que el usuario escribe, la búsqueda se vuelven más y más específico, por lo que me gustaría ser capaz de cancelar una consulta si todavía está ejecutando mientras que el usuario ha introducido información más específica (ya que los resultados serían simplemente descartarlo, de todos modos).Cancelación de una consulta de Entity Framework
Si esto fuera normal ADO.NET, obviamente podría usar la función DbCommand.Cancel
y terminarla, pero estamos usando EF4 para nuestro acceso a los datos y no parece haber una manera obvia de cancelar una consulta. Además, la apertura de System.Data.Entity en el reflector y mirando a EntityCommand.Cancel
muestra un cuerpo de método vacío desalentador, a pesar de la docs alegando que llamar a esto sería pasarlo a la función correspondiente Cancel
del comando de proveedor.
He considerado simplemente dejar que la consulta existente se ejecute y gire en un nuevo contexto para ejecutar la nueva búsqueda (y descartar la consulta una vez que termine), pero no me gusta la idea de que un solo cliente tenga una multitud de conexiones de bases de datos abiertas que ejecutan consultas paralelas cuando solo estoy interesado en los resultados de la más reciente.
Todo esto me está dando lugar a creer que simplemente no hay forma de cancelar una consulta de EF una vez que ha sido enviado a la base de datos, pero estoy esperando que alguien aquí podría ser capaz de señalar algo he pasado por alto.
TL/DR Versión: ¿Es posible cancelar una consulta EF4 que se está ejecutando actualmente?
He pedido a dudas acerca de este problema en el foro de MSDN: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/ d5ea8036-73e5-4566-9407-fa7a6a5fca3c Esta pregunta original está vinculada.Con suerte, alguien de MS brindará otra solución. –