私はリポジトリパターンのいくつかの実装を見てきました。これは非常にシンプルで直感的で、リンクされたフォームの他の回答がスタックオーバーフローにあります
http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C http://www.remondo.net/repository-pattern-example-csharp/
public interface IRepository<T>
{
void Insert(T entity);
void Delete(T entity);
IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate);
IQueryable<T> GetAll();
T GetById(int id);
}
public class Repository<T> : IRepository<T> where T : class, IEntity
{
protected Table<T> DataTable;
public Repository(DataContext dataContext)
{
DataTable = dataContext.GetTable<T>();
}
...
単体テストを行うときにメモリから動作するように設定するにはどうすればよいですか? メモリ内の何かから DataContext または Linq テーブルを構築する方法はありますか? 私の考えは、コレクション(リスト、ディクショナリ...)を作成し、単体テスト時にそれをスタブすることでした。
ありがとう!
編集:私はこのようなものが必要です:
- 私はクラスブックを持っています
- クラスライブラリがあります
コンストラクターで、
Library
リポジトリを初期化します。var bookRepository = new Repository<Book>(dataContext)
そして、
Library
メソッドはこのようにリポジトリを使用しますpublic Book GetByID(int bookID) { return bookRepository.GetByID(bookID) }
テストするときは、メモリ コンテキストを提供したいと考えています。本番環境では、実際のデータベース コンテキストを提供します。