2013-07-10 2 views
1

MVC에 대해 배우고 Entity Framework를 사용하고 있습니다. 제가 이해하려고하는 것은 저장소입니다. 내가 읽은 모든 튜토리얼은 하나의 엔티티와 거래를하며, 그 레벨에서 나는 이해를하지만, 여러 테이블은 어떨까요? 나는 모델 데이터베이스와 기존 데이터베이스를 연관 짓는 다양한 코드를 사용한다. 내 데이터베이스에는 3 개의 테이블이 있습니다. User, Journey 및 UserJourney (링크 된 테이블). 사용자와 여행은 다 - 대 - 다 관계가 있습니다. 각 엔티티에 대한 저장소가 있어야합니까? 여기에 집계가 있습니까? 장기적으로 나는 데이터베이스를 쿼리하여 사용자의 여행을 찾고보기로 전달하려고합니다.각 엔티티에 대한 리포지토리를 정의해야합니까?

내 질문에 애매 모호하지만이 문제에 대해 매우 혼란 스럽습니다. 이해에 도움이 될 것입니다.

답변

1

일반적으로 저장소는 각 엔터티에 정의되어서는 안되며 aggregate root별로 정의되어야합니다. 자체적으로 생존 할 수 없지만 일부 상위 엔티티와 관련된 엔티티가 있습니다. 이 상위 엔티티를 집계 루트라고하며 각각에 대해 리포지토리가 있어야합니다.

+0

확인로 사용할 수 있습니다. 그래서 저는 이제 연결된 UserJourney 테이블을 가지고 있습니다. 이 세 테이블이 합계를 구성합니까? 집계 루트는 무엇입니까? 나는 User라고 생각한다. –

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); 
관련 문제