Pregunta

La pregunta es: Dada una base de datos back-end que entiende LeftStr y RightStr: donde, en una implementación del proveedor de ADO.NET costumbre, me gustaría establecer una cartografía de las funciones canónicas inmutables EDM izquierda y derecha

?

Así que estoy trabajando con el proveedor de ADO.NET SQLite y funciona, más o menos, hasta que se topan con algunas funciones de cadena que están presentes, pero un nombre diferente. Entre las funciones que faltan / mismapped son las funciones de cadena canónicas izquierda y derecha.

En la extensión SQLite las funciones equivalentes se asignan a LeftStr y RightStr.

Me he quedado corto en la búsqueda de información. Al carecer de la documentación para este escenario, o mi falta de habilidad en la búsqueda de ella, tengo paso rastreó la llamada hasta el final en el método de fábrica que crea el comando con el SQL generado y sospechan que el SemanticResolver es mi mejor pista, pero he tomado un par de puñaladas en la oscuridad por esquivar con la única costura expuesta puedo encontrar, ProviderManifest.xml, pero estoy teniendo ninguna alegría.

¿Fue útil?

Solución

La respuesta supone que SampleEntityFrameworkProvider es la implementación de referencia.

Cada comando SQL para su ejecución en contra de un proveedor de la aplicación es procesada por SampleEntityFrameworkProvider.SampleProviderServices.CreateDbCommandDefinition.

Este método llama CreateCommand que a su vez pasa el DbCommandTree a SampleEntityFrameworkProvider.SqlGenerator, que es de tipo DbExpressionVisitor.

SqlGenerator de diccionarios estáticas de traducción para manejar inicializa.

He encontrado lo que estaba buscando en SqlGenerator.InitializeCanonicalFunctionHandlers y limitaba a seguir el patrón como se muestra.

Basta con añadir un nuevo método de control al diccionario enchavetado en el nombre de la función EDM desea manejar.

En este caso, el controlador sólo tenía que cambiar el nombre de la función antes de que se escribió.

Una vez más hay una aplicación por defecto de esta funcionalidad, HandleFunctionDefaultGivenName (DbFunctionExpression correo, cadena storeFunctionName).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top