Я хотел бы иметь возможность использовать полнотекстовый поиск в Code First Entity Framework.Однако это не единственная специфичная для SQL функция, которую команда, в которой я буду использовать, вероятно, будет использовать в будущем.
Я знаю, что Code First не предполагается для выполнения специфических для базы данных вещей.или UDF.
Однако, если я не смогу заставить это работать, у меня будут медленные запросы.Я хочу иметь возможность поиска по большому количеству записей (миллионы) по ряду критериев, включая диапазоны дат, частичный текстовый поиск и логические поля.
Так что в идеале я мог бы измениться на летуимя таблицы, которую конкретный DataSet
запрашивает dbo.GetMyEntityName(queryString)
.Я не думаю, что есть способ сделать это, я думал о его замене до того, как он был отправлен на сервер sql, но даже мне удалось узнать, что это за ссылка на таблицу.
Я попытался выяснить, как EFProviderWrappers
справляется с этим, но сначала он не очень хорошо обрабатывает код, и у меня сейчас нет свободного времени, чтобы написать новую версию для Code First.Я не знаю, возможно ли вообще заменить какую-либо часть команды, я не смог заставить ее работать вообще.Хотя я не пробовал запускать его с помощью edmx.
Другая вещь, о которой я подумал, - это использование метода IQueryable.ToString
, который для моего DbQueries
возвращает SQL-обертку с select * from ({0}) where {1}
, а затем выполняет его.при использовании Context.Database.SqlQuery
проблема с этой структурой сущностей была перепутана между моими ViewModels
и объектами моего Домена, потому что в некоторых случаях они имели схожие или одинаковые имена.
Другое решение состояло в том, чтобы зарегистрировать поиск / заменить на пользовательский SqlConnection
, поэтому после регистрации следующий выбор будет отредактирован, и что-то вроде [dbo].[MyEntity]
будет заменено на [dbo].GetMyEntity('query')
.Однако это очень ограниченно: если вы хотите ссылаться на одну и ту же таблицу несколько раз в одном и том же запросе, тогда он заменит оба, первое или последнее ... что не очень гибко.Если бы я мог выяснить, как он решает создать псевдоним этих таблиц, этот метод был бы очень прост.
Любые идеи будут с благодарностью.