MVC3を実行しているプロジェクトが少しあります。 LINQを使用してデータベースからデータをフェッチします。 私は、MVC3に付属している前例と同じアーキテクチャ設計でプロジェクトを構築しました。 このようなプロジェクトでは、アプリケーションが分割され、このトピックではModel.csファイルに焦点を当てたいと思います。私は現在、各コントローラのための1つを持っているので、例として、私はHighscoreController.csとHighscoreModels.csを持っています。モデルクラスでは、datacontextへの参照を持つServiceクラスと、このdatacontextを使用してデータベースにクエリを行ういくつかのメソッドを定義します。 これらのメソッドのいくつかが同じクエリを実行しているという問題が発生したため、データベースへのアクセスの中心点を作って、リポジトリパターンを実装すると思っていました。MVC、リポジトリパターンとDataLoadOptions
private IRepository _repository;
public HighscoreService()
: this(new Repository())
{ }
public HighscoreService(IRepository repository)
{
_repository = repository;
}
今すぐデータベース呼び出しがリポジトリ内で処理され、リポジトリがサービスクラスから使用されている: は、だからではなく、サービスクラスでのDataContextを参照したの私は今のようなリポジトリへの参照を持っています_repository参照を介して。私のリポジトリは、このように構築されている
:
public class Repository : IRepository
{
private MyDataContext _dataContext;
public Repository()
{
_dataContext = new MyDataContext();
}
public Member MemberByName(string memberName)
{
Member member = CompiledQueries.MemberByName(_dataContext, memberName);
return member;
}
}
私はこのリポジトリパターンとの組み合わせでDataLoadOptionsを使用しようとすると、私が直面する問題が表示されます。
dataloadoptionsを使用する場合、新しいdataloadoptionsが適用される前にdatacontextで以前のクエリを作成していてはいけません。私のリポジトリはすべてのメソッドでdatacontextを再利用しているため、これは全く機能しません。 私は2つのことを試しています.1つは、usingステートメントを使用して、datacontextが毎回リフレッシュされることを確認するために、すべてのメソッド内でdatacontextを再作成しています。しかし、リポジトリの結果をモデルに戻してスコープがリポジトリパターン内で使い果たされたときに、問題が発生します。これは、usingステートメントが終了すると、結果が使用できないことを意味します。私にデータを提供したdatacontextが終了したので、.Count()または.ToList()また、リポジトリ全体で同じdatacontextを使用する別のソリューションを試しましたが、dataloadoptionsを使用する各メソッドで新しいインスタンスを作成しました。これは非常に汚いと感じました;) 誰も私にリポジトリパターンでDataLoadOptionsを使用する方法の提案をしてもらえますか?私が今説明した問題を避けてください。または、私はdataloadoptionsを使用しないで、それを行う別の方法を選択する必要がありますか?ところで、DataLoadOptionsを使用する理由は、関連するテーブルからデータを取得したいからです。
少しの質問として:上記のコード例では、CompiledQueriesを独自の.csファイル内に配置していることがわかります。これは悪いデザインですか?コンパイルされたクエリをMVCアプリケーションに配置するためのガイドラインはありますか?
ご質問ありがとうございます。読んでいただきありがとうございます。より多くの情報が必要な場合は、尋ねてください。
私はエキスパートではありませんが、私はあなたのデータコンテキストを「要求範囲」に保つというアイデアは役に立ちます。このように、HTTP要求ごとに新しいコンテキストが作成されるため、いくつかの問題が取り除かれる可能性があります。 NinjectのようなIoCコンテナはこれを助けることができます。 Entity Frameworkを参照している間、次の投稿が役に立ちます:http://buildstarted.com/2010/08/24/dependency-injection-with-ninject-moq-and-unit-testing/ – ngm
リポジトリを注入してセットアップperWebRequestとしてのライフスタイル。無駄な抽象レイヤーを追加する以外は、リポジトリがあなたのために何をしているのかはまだ分かりません。 – CrazyCoderz