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