问题是:给定一个理解LeftStr和RightStr的数据库后端:在自定义ADO.NET提供程序实现中,我是否可以建立映射到不可变EDM规范函数Left和Right?
所以我正在使用SQLite ADO.NET提供程序,它或多或少都有效,直到你碰到一些存在但命名不同的字符串函数。丢失/错误映射的函数中有规范的字符串函数Left和Right。
在SQLite扩展中,等效函数映射到LeftStr和RightStr。
我在寻找信息时表现不佳。由于缺少这种情况的文档,或者我缺乏查找它的能力,我已经将调用跟踪到工厂方法,该方法使用生成的SQL创建命令并怀疑SemanticResolver是我最好的线索,但我已经采取了在我看到的唯一暴露的接缝(ProviderManifest.xml)中捏了一下,在黑暗中刺了几下,但我没有快乐。
答案 0 :(得分:1)
答案假设SampleEntityFrameworkProvider是参考实现。
要对提供程序实现执行的每个sql命令都由SampleEntityFrameworkProvider.SampleProviderServices.CreateDbCommandDefinition处理。
此方法调用CreateCommand,后者又将DbCommandTree传递给SampleEntityFrameworkProvider.SqlGenerator,类型为DbExpressionVisitor。
SqlGenerator初始化静态字典以处理翻译。
我在SqlGenerator.InitializeCanonicalFunctionHandlers中找到了我要查找的内容,并且只是按照显示的模式进行了。
只需将新处理程序方法添加到键盘上,该字典键入要处理的EDM函数的名称。
在这种情况下,处理程序只需要在函数写出之前重命名该函数。
此功能还有一个默认的实现,即HandleFunctionDefaultGivenName(DbFunctionExpression e,string storeFunctionName)。