Я нахожусь в процессе написания диспетчера запросов для приложения WinForms, которое, помимо прочего, должно быть в состоянии доставлять результаты поиска в режиме реального времени пользователю, когда он вводит запрос (представьте, что результаты Google в режиме реального времени хотя, очевидно, в среде толстых клиентов, а не в Интернете). Поскольку результаты должны начать поступать по мере ввода пользователем текста, поиск будет становиться все более и более конкретным, поэтому я хотел бы иметь возможность отменить запрос, если он все еще выполняется, пока пользователь вводит более конкретную информацию (поскольку результаты во всяком случае, просто отказаться)
Если бы это был обычный ADO.NET, я, очевидно, мог бы просто использовать функцию DbCommand.Cancel
и покончить с этим, но мы используем EF4 для нашего доступа к данным, и не существует очевидного способа отменить запрос. Кроме того, открытие System.Data.Entity в Reflector и просмотр EntityCommand.Cancel
показывает обескураживающе пустое тело метода, несмотря на то, что docs утверждает, что вызов этого параметра передаст его соответствующей функции Cancel
команды провайдера.
Я подумал о том, чтобы просто запустить существующий запрос и ускорить новый контекст для выполнения нового поиска (и просто избавиться от существующего запроса после его завершения), но мне не нравится идея, что один клиент имеет множество открытых соединений с базой данных, выполняющих параллельные запросы, когда меня интересуют только результаты самого последнего.
Все это наводит меня на мысль, что просто невозможно отменить запрос EF после его отправки в базу данных, но я надеюсь, что кто-то здесь сможет указать на то, что я пропустил.
Версия TL / DR: возможно ли отменить запрос EF4, который выполняется в данный момент?