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 を DbExpressionVisitor 型の SampleEntityFrameworkProvider.SqlGenerator に渡します。

SqlGenerator は、翻訳を処理するために の静的辞書を初期化します。

SqlGenerator.InitializeCanonicalFunctionHandlers で探していたものを見つけ、示されているパターンに従いました。

処理したい EDM 関数の名前をキーにしたディクショナリに新しいハンドラ メソッドを追加するだけです。

この場合、ハンドラーは、書き出す前に関数の名前を変更する必要がありました。

ここでも、この機能の既定の実装である HandleFunctionDefaultGivenName(DbFunctionExpression e, string storeFunctionName) があります。

于 2010-01-17T11:19:02.663 に答える