2012-10-30 3 views
1

내가 엔티티 프레임 워크의 일반적인 저장소 작업을 시도하고 아래에이 코드를 건너 온 오전 :일반 저장소 생성자

public class GenericRepository<TContext, TEntity> : IGenericRepository<TEntity> 
where TContext : IUnitOfWork 
where TEntity : class 
{ 
protected TContext _context; 
/// <summary> 
/// Constructor that takes a context 
/// </summary> 
/// <param name="context">An established data context</param> 
public GenericRepository(TContext context) 
{ 
    _context = context; 
} 

public IQueryable<TEntity> Select() 
{ 
    return _context.Set<TEntity>().AsQueryable(); 
} 

public IEnumerable<TEntity> GetAll() 
{ 
    return _context.Set<TEntity>().AsEnumerable(); 
} 

public IEnumerable<TEntity> Where(Func<TEntity, bool> predicate) 
{ 
    return _context.Set<TEntity>().Where(predicate); 
} 

public TEntity GetSingle(Func<TEntity, bool> predicate) 
{ 
    return _context.Set<TEntity>().Single(predicate); 
} 

public TEntity GetFirst(Func<TEntity, bool> predicate) 
{ 
    return _context.Set<TEntity>().First(predicate); 
} 

public void Add(TEntity entity) 
{ 
    if (entity == null) 
     throw new ArgumentException("Cannot add a null entity"); 

    _context.Set<TEntity>().Add(entity); 
} 

public void Delete(TEntity entity) 
{ 
    if (entity == null) 
     throw new ArgumentException("Cannot delete a null entity"); 

    _context.Set<TEntity>().Remove(entity); 
} 

public void Attach(TEntity entity) 
{ 
    if (entity == null) 
     throw new ArgumentException("Cannot attach a null entity"); 

    _context.Set<TEntity>().Attach(entity); 
} 

#region IDisposable implementation 
private bool disposedValue; 

public void Dispose(bool disposing) 
{ 
    if (!this.disposedValue) 
    { 
     if (disposing) 
     { 
      // dispose managed state here if required 
     } 
     // dispose unmanaged objects and set large fields to null 
    } 
    this.disposedValue = true; 
} 

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(this); 
} 
#endregion 
} 

그러나 나는 조금 어려운 만든 생성자의 필요성을 이해하고 찾을 수

/// <summary> 
/// Constructor that takes a context 
/// </summary> 
/// <param name="context">An established data context</param> 
public GenericRepository(TContext context) 
{ 
    _context = context; 
} 

누군가 사용법을 설명해 주시겠습니까?

감사

이 프로젝트에 여러 DbContext 클래스가, 그래서 당신은 당신이 사용하는 DbContext GenericRepository 클래스를 알려주는 특정 DbContext 인스턴스를 주입해야 할 수도 있기 때문이다

답변

2

.

여러 DbContext 클래스가해야 할 이유는 아마도 다음과 같습니다

  1. 여러 데이터베이스에 대한 귀하의 프로젝트 대상;

  2. 프로젝트가 큽니다. 성능 및 유지 관리 용이성을 고려하여 프로젝트를 여러 모듈로 나누고 싶습니다.

    public class BaseContext<TContext> : DbContext 
        where TContext : DbContext, new()   
    {   
        protected BaseContext() 
        : base("name=ConnectionString") 
        {    
        } 
    } 
    
    public class ShopDbContext :BaseContext<ShopDbContext> 
    { 
        public DbSet<Product> Products{ get; set; } 
    } 
    
    public class BlogDbContext :BaseContext<BlogDbContext> 
    { 
        public DbSet<Blog> Blogs{ get; set; } 
    } 
    
  3. 이제

당신이 제품을 조회하려는 경우, 당신은 ShopDbContext를 인스턴스화해야하며, (IOC의 좋은 선택)을 GenericRepository 생성자에 전달할 예를 들면 다음과 같습니다.

+0

정말 고마워요. 지금 받으십시오. :) – RAHUL

관련 문제