1

切実に助けが必要です。

最初にエンティティ フレームワーク コードを使用しており、ドメイン クラスからコンテキストを分割することに関するジュリー ラーマンの提案に従おうとしていますが、エンティティ フレームワークにコンパイルされたビューを認識させることができません。私は多くのことを試しましたが、これまでのところ、コンパイルされたビューのコンストラクターを呼び出すことができますが、最初のクエリには約 15 分かかります (約 329 のエンティティと 600 以上のビューが作成されます)。これにより、最初のクエリでビューを作成する必要があると思います。

手順

  1. 既存のデータベースと「モデル プロジェクト」を使用して、Entity Power Tools Beta 3 を実行し、データベースを「コード ファーストでリバース エンジニア」しました。これにより、コンテキスト、ドメイン クラス、およびマッピング (流れるような) クラスが作成されました。参考までに、これを行うのは、コーディング標準に合わせて T4 テンプレートをわずかに変更したためです。

  2. Julie Lerman の Plural Site トレーニング ビデオからの推奨事項を使用して、ドメイン クラス、コンテキスト、およびマッピング クラスを 3 つの個別のプロジェクト (コンテキスト、ドメイン クラス、マッピング) に分けました。モデル プロジェクトからこれら 3 つのプロジェクトにそれぞれファイルをコピーし、名前空間をプロジェクト名と場所に対応するように変更しました。4 つのプロジェクトの結果と名前空間: "MyCompany.DataContext"、"MyCompany.DomainClasses"、"MyCompany.DomainMappings"、"MyCompany.Model"。

  3. 「モデル プロジェクト」と Entity Power Tools から生成されたコードを使用して、作成したコンテキスト ファイルを選択し、マウスの右ボタンを押してコンテキスト メニューを表示し、「ビューの生成」を選択しました。これを行うと、「シーケンスに一致する要素が含まれていません」というエラーが表示されます。(問題#1)

  4. OK、うまくいかなかったので、ビューを生成するために「Pawel Kadluczka」による T4 テンプレートを「MyCompany.DataContext」プロジェクトに追加し、そのカスタム ツールを実行して成功しました。ビューはエラーなしで作成されました。ただし、テスト アプリケーションを実行して基本的なクエリを実行すると、最初のクエリに 15 分かかり、生成されたビューのコンストラクター "ViewsForBaseEntitySets1B04A...0F8A()" が呼び出されません。

  5. OK、それもうまくいかなかったので、T4 テンプレートによって作成された「ビュー」ファイルを「MyCompany.DomainClasses」プロジェクトに追加して、クラスでコンパイルされ、テスト アプリケーションを再度実行できるようにしました。今回は、最初のクエリに 15 分かかりましたが、コンストラクターを開始してから約 20 秒以内に "ViewsForBaseEntitySets1B04A...0F8A()" が呼び出されました。これは進歩ですが、バナナではありません。これにより、ビューはコンテキストではなくドメイン クラスと同じアセンブリにある必要があると思われます。 質問: これは正しい仮定ですか? また、それでも 15 分かかったので、Entity Framework がビューを見たようでしたが、気に入らなかったので、再度作成し直しました。 可能?

それで?私は途方に暮れており、頭を壁にぶつけています。プロジェクトを分割した複数のコンテキストでプリコンパイル済みビューを作成するにはどうすればよいですか? ビューはどこに行きますか?私が守っていない名前空間のルールはありますか? 2 つ以上のコンテキストがある場合はどうなりますか?

助けてください。紀元前

4

1 に答える 1

1

解決しました。コンテキストのアセンブリに関係なく、プリコンパイルされたビューはドメイン クラスと同じアセンブリにある必要があるようです。

また、私の問題の最終的な原因は、インスタンス化されていたコンテキストではなく、実際に使用されていた別のコンテキストがあったことです。両方のコンテキストがインスタンス化されていることに気づきませんでしたが、実際に呼び出されたのは 2 番目のコンテキストであり、コンパイル済みのビューを作成していなかったため、テスト アプリケーションが実行されるたびに長い時間がかかっていました。新しくコンパイルされたビューで 2 番目のコンテキストを使用しているため、最初のクエリは 15 分ではなく 18 秒になりました。

現在、2 つのコンテキスト プロジェクト (MyCompany.Context、MyCompany.SystemContext) と、MyCompany.DomainClasses プロジェクト、MyCompany.Model プロジェクト、および MyCompany.DomainMappings プロジェクトがあります。T4 スクリプトを使用して両方のコンテキスト プロジェクトでビューを生成し、コピーしたリンクを使用して MyCompany.DomainClasses からビュー ファイルを含め、再生成時にドメイン クラス ファイルも更新されるようにしました。これにより、Entity Framework がコンパイルされたビューを検出できるようになり、最初のクエリの起動時間が短縮されます。

于 2013-05-23T01:42:23.637 に答える