2012-03-22 13 views
5

数日前に私はGenericRepositoryとUnit Of Workパターンhttp://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-applicationに関するチュートリアルを読んでいました。私はWebフォームを使用し、EntityFramework CTP4パッケージがインストールされています。 (私はEF 5を使用することはできません)。EntityFramework 4、DbSet、ObjectContext

は、私は私のプロジェクトのための一般的なリポジトリをコーディングしたいが、私はこのラインで立ち往生した

this.dbSet = context.Set<TEntity>(); 

私はこのラインが機能しないことを知っている私のプロジェクトとデータベースの最初のアプローチでの使用のObjectContextので。どうすればそれに対処できますか?コードを最初にマイグレーションせずにジェネリックリポジトリをコード化することはできますか(私の場合はオプションではありません)?

答えて

7

これはObjectContextはと同等です:

this.dbSet = context.CreateObjectSet<TEntity>(); 

今これはObjectSet<TEntity>ではなくDbSet<TEntity>を作成しますが、あなたのパターンのためにあなたが同じ方法でそれを使用することができます。

UPDATEは

ObjectSetクラスはそのようなユーティリティメソッドがDbSetFind()方法と一致する必要はありません。 「キーで取得」するには、EntityKeyを構築し、ObjectContext.GetEntityByKey()を使用する必要がありますが、残念ながらこれは実際には簡単なことではありません。

実際にこれに取り組む簡単な方法はありません。これは私が見つけたものです。私の場合、共通のクラスからすべてのエンティティをベースにすることです(カスタムT4テンプレートを使用してモデルからクラスを生成する)。私は単純に行うことができ、その後

public class MyRepository<TEntity> where TEntity : MyEntityBaseClass 

そして、私の共通の基底クラスは、すべてのエンティティによって継承されIdフィールドがあります:そして、私は次のように、私のリポジトリへの一般的な制約を追加することができます

return myObjectSet.SingleOrDefault(x => x.Id == myId); 

他の方法があると確信しています。それは別の質問の良い話題かもしれません。

+0

ありがとうございました。 これで、DbSet ではなくObjectSet が作成されますが、パターンについては同じ方法で使用できます。 私はこの行のfindメソッドに問題があります。 dbSet.Find(id); ObjectSetを使用してこれをコード化するにはどうすればよいですか? – mrrobot

+0

ObjectSetのIdで検索するのが難しいため、なぜDbContextを使用しなかったのですか?私はこのメソッドのどれを使うべきか、あなたと同じ方法でfindメソッドを作成しようとしているのだろうか、おそらく私はDbContextを使うべきでしょうか?私は今までこのプロジェクトで多くのコードを書いていないので、おそらくDbContextを使う方が良いでしょうか?あなたはそれについてあなたの意見を与えることができますか?ありがとうございます – mrrobot

+0

私は私のアプリケーションを開始した時点で、EFコードファーストはまだリリースされていませんでした。 Ropstahの答えに基づいて、Model FirstまたはDatabase Firstアプリケーション用のCode Firstスタイルクラスを生成するために使用できるテンプレートがあるようです。私はそのアプローチを試みたことがないので、実際にそれがうまくいくかどうか、またそれがうまくいくかどうかについては話すことができません。 – CodingGorilla

4

1.あなたのVisual StudioテンプレートにDbContextGeneratorテンプレートを追加したい:あなたは.edmxファイルのデフォルトの生成ツールをクリアしてください。この後

DbContextGenerator template

2.を。

Code generation tool

3.あなたが望むように今、あなたはGenericRepositoryパターンを実装することができます。

関連する問題