2010-01-17 10 views
2

Вопрос: Учитывая бэкэнд базы данных, который понимает LeftStr и RightStr: где в пользовательской реализации ADO.NET я бы установил сопоставление с неизменяемыми каноническими функциями EDM влево и вправо?Как сопоставить функцию EntitySql с именованной функцией в магазине?


Так я работаю с SQLite поставщика ADO.NET, и она работает, более или менее, пока не натыкаются некоторых строковых функций, которые присутствуют, но называются по-разному. Среди отсутствующих/несогласованных функций - канонические строковые функции Left и Right.

В расширении SQLite эквивалентные функции отображаются в LeftStr и RightStr.

Я искал информацию, когда искал информацию. Отсутствие документации для этого сценария или отсутствие у меня возможности найти его, я шаг за шагом проследил весь процесс до фабричного метода, который создает команду с сгенерированным SQL и подозревает, что SemanticResolver - мой лучший ключ, но я взял несколько ударов в темноте, промахиваясь единственным открытым швом, который я могу найти, ProviderManifest.xml, но у меня нет радости.

+0

Я в настоящее время смотрю @ ExpressionCopier –

+0

сейчас ищет @ DbExpressionVisitor –

ответ

1

Ответ предполагает, что SampleEntityFrameworkProvider является эталонной реализацией.

Каждая команда sql, которая должна быть выполнена против реализации поставщика, обрабатывается SampleEntityFrameworkProvider.SampleProviderServices.CreateDbCommandDefinition.

Этот метод вызывает CreateCommand, который, в свою очередь, передает DbCommandTree в SampleEntityFrameworkProvider.SqlGenerator, который имеет тип DbExpressionVisitor.

SqlGenerator инициализирует статические словари для обработки перевода.

Я нашел то, что искал в SqlGenerator.InitializeCanonicalFunctionHandlers, и просто следил за рисунком, как показано.

Просто добавьте новый метод обработчика в словарь, на который вводится имя функции EDM, которую вы хотите обработать.

В этом случае обработчик просто должен был переименовать функцию перед ее записью.

Опять же, по умолчанию реализована эта функциональность HandleFunctionDefaultGivenName (DbFunctionExpression e, string storeFunctionName).

Смежные вопросы