2011-08-15 20 views
3

私は、Entity Frameworkと関連する.edmxファイルを取り巻く研究の場を行っています。EF&.EDMXパフォーマンスの考慮事項

私たちの現在の設定には、私たちが広範囲に使用するライブラリにコンパイルされたいくつかのファイルがあります。もちろん、これは洗練された解決策ではありません。データベース層で何かを更新したり追加したりするたびに、このライブラリを再コンパイルする必要があります。

私たちはストアドプロシージャを排他的に使用していますが、現在の方法はオブジェクトコンテキストでExecuteFunctionメソッドを使用することです。ただし、edmxファイルのどのインポート関数がどのタイプを返すかについての知識が必要です(context.ExecutionFunction<T>()ObjectResult<T>を返します)。

私の理論上の解決策は、使用する.edmxファイルを相対パスで保存し、実行時にそれらをすべてロードすることです。

誰もこれを前に試しましたか?それは動作しますか?考慮する必要のあるパフォーマンスに関する考慮事項はありますか?これはeコマース環境で使用されるため、効率と速度が重要です。 SOME MORE FOR CLARITY

EDITは:

確かにthisの使用を許可する可能性がある、独自のアセンブリにして、個々の.edmxファイルをコンパイルすることも可能です。その上の入力も素晴らしいでしょう。

我々は今作る呼び出しはそのコンストラクタでこの

Database.MakeCall<T>("stored_procedure_name", parametersCollection, KnownDatabases.Database); 

のようなもので、データベースハンドラは、(ライブラリ内のthe.edmxの各ファイルを)それが知っているデータベースのコンテキストのそれぞれのインスタンスを保持します。 KnownDatabases列挙型を使用して、クエリを実行するデータベースを選択します。

Database.MakeCall<T>("context_name", "stored_procedure_name", parametersCollection); 

データベースハンドラでは、そのコンストラクタで、.edmxファイルのフォルダを検索し、それらのすべては、ストアインスタンスをロードします:

理想的には、私はこのようなコールを達成したいのですが各コンテキストのコンテキスト名に対するどのようにTが定義され、取得されるかは、今は少しぼやけています。

どちらの場合も、戻り値の型を使用して、DBを維持する必要がないので、何を検討したいと思うかもしれませんが、ルビー風のDBマッピング、DBスキーマが実行時に決定されるものであるObjectResult<T>

答えて

0

だろう-ORMマッピング・ライブラリー・コード。

.netの場合、SubsonicはCastleとnHydrateのようなORMを持っています。私はそのようなシステムは、C++の実装(ODB)が良いスキルを持っていることを知っています(たとえコードスキーマを生成してもスキーマを作成しますが、これは自動的に行います)。

+0

私は、 。理想的には、与えられたデータベースに対してストアドプロシージャ(名前を知っている)を実行できるようにする必要があります。今は、すべてのデータベース用に新しい.edmxファイルを生成し、それをライブラリにコンパイルすることで実現します。私が達成したいのは、実行するデータモデルからストアドプロシージャを実行するコードを切り離すことです。 – AndyBursh

関連する問題