Asp.net Mvc:LINQ to SQLを使用したモデルクラスの作成
-
10-07-2019 - |
質問
Asp.net Mvcを学習しようとしているので、試しています このチュートリアル。
リポジトリパターンと、Linq to Sqlを直接呼び出すのではなく、別のデータアクセステクノロジーに簡単に変更する方法について説明します。
コントローラークラス内でLINQ to SQLを使用すると、将来データアクセステクノロジーを切り替えることが難しくなります。たとえば、Microsoft LINQ to SQLの使用から、データアクセステクノロジーとしてMicrosoft Entity Frameworkの使用に切り替える場合があります。その場合、アプリケーション内のデータベースにアクセスするすべてのコントローラーを書き換える必要があります。
注:このチュートリアルを読む前に、インターフェイスがどのように機能するかを実際に理解したことはありませんでした。今では、クラスの「テンプレート」のようなものだと考えています。
Linq to Sqlを正常に使用した後、Ado.net Entity Frameworkを試してみるといいと思いました。リポジトリパターンを使用すると簡単に切り替えられるので、テストするつもりだと彼らは言いました。
私の質問: Ado.net EFに変更するにはどうすればよいですか
これは私がすべきだと思うことです。
- Movie.edmxファイルを追加して構成します(ムービーテーブルを追加します)。
- IMovieRepositoryに基づいて新しいクラスを作成し、MovieEFRepositoryと呼ぶこともあります。
- コントローラーコンストラクターのパラメーターをMovieEFRepositoryに変更します。チュートリアルでは、リポジトリを使用しないと、他のデータソースに変更した場合、すべてのコントローラーを変更する必要があると彼らは言うので、これは私が最初に奇妙なことです。 MovieRepositoryクラスを指定しているので、とにかくすべてのコントローラーを変更する必要はありませんか?
- 最後に調整する必要があるのは、ビューを変更することです。それは、Linq to Sqlデザイナーによって作成されたProductクラスを使用しているためです。どのようにこれを行うのかわかりません。 dbmlファイルに依存しないオブジェクトを使用すべきだったと思いますか?
Asp.net Mvcを少し単純化した見方をしてくれたら許してください。私は、Asp.net webdevelopmentに多くの興味を持っているwebdesignerです。
解決
インジェクションのためにリポジトリが切り離されている可能性があります。例のためだけにしたのではなく、
public MoviesController():this(new ** MovieRepository **())
IOCについて読むことをお勧めします。簡単で非常に面白いです。城ウィンザーのようなiocコンテナーを使用できます。
それにより、コントローラーには、インターフェースを持つコンストラクターが1つだけあり、変更する必要はありません。
エンティティを使用すると、コントローラと同じことができ、各エンティティのインターフェイスを作成し、iocパターンも使用できます。thaを使用すると、iocコンテナの構成ファイルを変更するだけで済みます。
これらのことを行わない場合、あなたの権利は、あなたが言ったことをすべて変える必要があります。
お役に立てば幸いです!私の英語についてすみません!
他のヒント
それで、数日間の読書と多くのグーグル検索の後、私はそれを動作させました。最初に、IoC(Inversion of Control)が実際に意味するものを見つけようとしました。
私が最初に見つけたサイトの1つは、Unityに関するスクリーンキャストを掲載したWebサイトでした。これは.Net用のDI / IoCフレームワークです。
- リンク: David Haydenのスクリーンキャスト。
これを見ると、これは実際に非常に優れたスクリーンキャストであり、UnityとIoC / DIを使用するのがいかに簡単かを示す例です。当時は完全に理解できなかったので、続けてグーグル検索を続けました。
私が走り続けたWebサイトは、Martin FowlerのWebサイトでした。
私にとって、このウェブサイトのコーディング初心者は、少し抽象的です。また、これは奇妙に聞こえるかもしれませんが、そのウェブサイトのフォント、行の高さ、タイポグラフィは本当にひどく、読みにくくしました。
次に読んだウェブサイトは、AlfredoFernándezが使いやすいと言っていたので、Windsor Castleについてでした。
ドキュメントは悪くありませんでしたが、「開始」の変換に問題がありました。 Asp.net Mvcアプリケーションの基本的な例。また、パート2とパート3は開始時に欠落していました。
この後、本当に基本的な例を見つけることができるかどうかを確認するために、さまざまなフレームワークを探し始めました。最初のスクリーンキャストをもう一度見ただけで、もっと早く修正できただろうが、どういうわけか追跡できなくなった。
- リンク: Scott Hanselman:.NET DI Containers(IOCのリスト):.NET IOCソリューションのほとんどに関する非常に優れたブログ投稿。
- リンク: Phil Haack:構造マップを使用したTTDおよびDI :xml構成ファイルの使用は私にとって複雑であり、動作させることができませんでした。
- リンク: Andre Loker:ASPNET-MVC-with-Windsor-programmatic-controller-registration :この例を試しませんでした。今それを見て、私はそれを動作させることができたかもしれません。
- リンク: MvcContrib :これにより、Asp.net Mvcに機能が追加されます。また、3つまたは4つのIOC ControllerFactoriesが組み込まれています。機能させることができませんでした。また、これに関するドキュメントもあまり見つかりませんでした。
xml構成ファイルに多くの問題があり、それらを機能させることができなかったようです。 Windsor、Structure Map、Spring.netを試しましたが、常にxmlファイルにこだわっていました。
Asp.net Mvcのサイトにアクセスすることにしました。Asp.netMvcについて学んだのはそのためです。最初のスクリーンキャストとMIX09のプレゼンテーションは非常に明確で、人々が話していることのほとんどを理解しました。 Storefrontアプリケーションを構築するときに、Rob Coneryによる2回目のスクリーンキャストで行き詰まりました。リポジトリとIOC / DIについてもう少し知っていたので、Rob Coneryのスクリーンキャストをもう一度見始めるのは良い考えだと思いました。スクリーンキャストの1つで、彼はすべてのサンプルをcodeplexにアップロードすることについて話しています。
- リンク: Codeplex:Mvcサンプルアプリ
codeplexに行って、閲覧できることがわかりました