Pergunta

A questão é:Dado um back-end de banco de dados que entende LeftStr e RightStr:onde, em uma implementação personalizada do provedor ADO.NET, eu estabeleceria um mapeamento para as funções canônicas imutáveis ​​do EDM Esquerda e Direita?


Então, estou trabalhando com o provedor SQLite ADO.NET e ele funciona, mais ou menos, até você encontrar algumas funções de string que estão presentes, mas com nomes diferentes.Entre as funções ausentes/mal mapeadas estão as funções canônicas de string Esquerda e Direita.

Na extensão SQLite as funções equivalentes são mapeadas para LeftStr e RightStr.

Fiquei aquém ao procurar informações.Na falta de documentação para este cenário, ou na minha falta de habilidade em encontrá-lo, rastreei a chamada até o método de fábrica que cria o comando com o SQL gerado e suspeito que o SemanticResolver seja minha melhor pista, mas tomei algumas facadas no escuro, falsificando a única costura exposta que posso encontrar, ProviderManifest.xml, mas não estou tendo alegria.

Foi útil?

Solução

A resposta pressupõe que SampleEntityFrameworkProvider seja a implementação de referência.

Cada comando sql a ser executado em uma implementação de provedor é processado por SampleEntityFrameworkProvider.SampleProviderServices.CreateDbCommandDefinition.

Este método chama CreateCommand que, por sua vez, passa DbCommandTree para SampleEntityFrameworkProvider.SqlGenerator, que é do tipo DbExpressionVisitor.

O SqlGenerator inicializa dicionários estáticos para lidar com a tradução.

Encontrei o que procurava em SqlGenerator.InitializeCanonicalFunctionHandlers e apenas segui o padrão mostrado.

Basta adicionar um novo método manipulador ao dicionário digitado no nome da função EDM que você deseja manipular.

Nesse caso, o manipulador só precisava renomear a função antes de ela ser escrita.

Novamente há uma implementação padrão desta funcionalidade, HandleFunctionDefaultGivenName(DbFunctionExpression e, string storeFunctionName).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top