2

问题是:给定一个理解 LeftStr 和 RightStr 的数据库后端:在自定义 ADO.NET 提供程序实现中,我应该在哪里建立到不可变 EDM 规范函数 Left 和 Right 的映射?


所以我正在使用 SQLite ADO.NET 提供程序,它或多或少地工作,直到你遇到一些存在但命名不同的字符串函数。缺失/映射错误的函数包括规范字符串函数 Left 和 Right。

在 SQLite 扩展中,等效函数映射到 LeftStr 和 RightStr。

我在查找信息时遇到了问题。由于缺乏这种情况的文档,或者我缺乏找到它的能力,我已经将调用一直跟踪到使用生成的 SQL 创建命令的工厂方法中,并怀疑 SemanticResolver 是我最好的线索,但我已经采取了用我能找到的唯一暴露的接缝 ProviderManifest.xml 捏造,在黑暗中刺了几下,但我没有任何乐趣。

4

1 回答 1

1

答案假定 SampleEntityFrameworkProvider 是参考实现。

要针对提供程序实现执行的每个 sql 命令都由 SampleEntityFrameworkProvider.SampleProviderServices.CreateDbCommandDefinition 处理。

此方法调用 CreateCommand,后者又将 DbCommandTree 传递给 SampleEntityFrameworkProvider.SqlGenerator,它的类型为 DbExpressionVisitor。

SqlGenerator 初始化静态字典来处理翻译。

我在 SqlGenerator.InitializeCanonicalFunctionHandlers 中找到了我正在寻找的内容,并按照所示的模式进行操作。

只需将新的处理程序方法添加到以您要处理的 EDM 函数名称为键的字典中。

在这种情况下,处理程序只需要在函数被写出之前重命名它。

同样,此功能有一个默认实现,HandleFunctionDefaultGivenName(DbFunctionExpression e, string storeFunctionName)。

于 2010-01-17T11:19:02.663 回答