代码之家  ›  专栏  ›  技术社区  ›  Sky Sanders

如何将EntitySQL函数映射到存储区中不同名称的函数?

  •  2
  • Sky Sanders  · 技术社区  · 15 年前

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


    因此,我使用的是sqlite ado.net提供程序,它或多或少可以工作,直到遇到一些字符串函数,这些函数存在但名称不同。在缺少/映射错误的函数中,有左边和右边的规范字符串函数。

    在sqlite扩展中,等效函数映射到leftstr和rightstr。

    我在寻找信息时遇到了困难。由于缺乏这个场景的文档,或者我找不到它的能力,我一直在跟踪调用到使用生成的SQL创建命令的工厂方法,并怀疑语义解析器是我最好的线索,但是我已经在黑暗中用我能找到的唯一暴露的接缝(providermanif)进行了一些尝试。但是我没有快乐。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Sky Sanders    15 年前

    答案假设sampleEntityFrameworkProvider是引用实现。

    对提供程序实现执行的每个SQL命令都由sampleEntityFrameworkProvider.sampleProviderServices.createdCommandDefinition处理。

    此方法调用CreateCommand,然后将dbcommandtree传递给sampleEntityFrameworkProvider.sqlGenerator,后者属于dbExpressionVisitor类型。

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

    我在sqlGenerator.InitializeCanonicalFunctionHandlers中找到了我要查找的内容,然后按照所示的模式进行操作。

    只需向字典中添加一个新的处理程序方法,该方法键入要处理的EDM函数的名称。

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

    同样,此功能的默认实现handleFunctionDefaultGivenName(dbFunctionExpressione,String StoreFunctionName)。

    推荐文章