如何将EntitySql函数映射到商店中不同名称的函数?

时间:2010-01-17 09:23:56

标签: entity-framework ado.net entity-sql

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


所以我正在使用SQLite ADO.NET提供程序,它或多或少都有效,直到你碰到一些存在但命名不同的字符串函数。丢失/错误映射的函数中有规范的字符串函数Left和Right。

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

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

1 个答案:

答案 0 :(得分:1)

答案假设SampleEntityFrameworkProvider是参考实现。

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

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

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

我在SqlGenerator.InitializeCanonicalFunctionHandlers中找到了我要查找的内容,并且只是按照显示的模式进行了。

只需将新处理程序方法添加到键盘上,该字典键入要处理的EDM函数的名称。

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

此功能还有一个默认的实现,即HandleFunctionDefaultGivenName(DbFunctionExpression e,string storeFunctionName)。