1

私は MVC について学習しており、Entity Framework を使用しています。私が理解しようとしているのはリポジトリです。私が読んだすべてのチュートリアルは 1 つのエンティティを扱っており、そのレベルでは理解していますが、複数のテーブルについてはどうでしょうか。コード ファーストのバリエーションを使用して、モデル クラスを既存のデータベースに関連付けます。私のデータベースには、3 つのテーブルがあります。User、Journey、および UserJourney (リンクされたテーブル)。User と Journey は多対多の関係にあります。エンティティごとにリポジトリを用意する必要がありますか? ここで集計は役に立ちますか? 長期的には、データベースにクエリを実行してユーザーの旅を見つけ、ビューに渡したいと考えています。

私の質問はおそらく漠然としていますが、私はこの問題についてかなり混乱しているので、これを理解するための助けをいただければ幸いです!

4

2 に答える 2

1

GenericRepository という概念を検索します。各エンティティの問題のリポジトリを取り除くのに役立ちます。以下のサンプル:

public interface IGenericRepository<T> where T : class
{
    IEnumerable<T> GetAll();
    T SingleOrDefault(Expression<Func<T, bool>> predicate);
    IEnumerable<T> Get(Expression<Func<T, bool>> predicate);
    void Insert(T entity);
    void Update(T entity);
    void Delete(object id);
    void Delete(T entity);
}

public class GenericRepository<T> : IGenericRepository<T> where T : class
{
    readonly MyDbContext _context;
    readonly DbSet<T> _dbSet;
    public GenericRepository(PfsDbContext context)
    {
        _context = context;
        _dbSet = context.Set<T>();
    }

    public virtual IEnumerable<T> GetAll()
    {
        return _dbSet.AsEnumerable();
    }

    public T SingleOrDefault(Expression<Func<T, bool>> predicate)
    {
        return _dbSet.Where(predicate).SingleOrDefault();
    }

    public IEnumerable<T> Get(Expression<Func<T, bool>> predicate)
    {
        return _dbSet.Where(predicate);
    }

    public void Insert(T entity)
    {
        _dbSet.Add(entity);
    }

    public void Update(T entityToUpdate)
    {
        _dbSet.Attach(entityToUpdate);
        _context.Entry(entityToUpdate).State = EntityState.Modified;
    }

    public void Delete(T entity)
    {
        if (_context.Entry(entity).State == EntityState.Detached)
        {
            _dbSet.Attach(entity);
        }
        _dbSet.Remove(entity);
    }

    public void Delete(object id)
    {
        var entityToDelete = _dbSet.Find(id);
        Delete(entityToDelete);
    }
  }

その後、次のように使用できます

var userRepository = new GenericRepository<User>(_context);
var journeyRepository = new GenericRepository<Journey>(_context);
于 2013-07-10T23:07:49.420 に答える