2016-09-21 5 views
-1

T4 템플릿으로 전체 데이터 액세스 레이어를 생성하는 방법에 대해 좀 더 설명하는 도움말이나 포인터를 찾고 있습니다. 예를 들어 INSERT 등의 모든 문장과이를 구현하는 C# 메소드.t4 템플릿으로 데이터 액세스 레이어 생성

+1

. @Marco Munnik – zahed

+1

EF를 사용하고 싶지 않은 이유가 있습니까? 그런 다음 EF가 이미 저장소 패턴/작업 단위 (UOW)를 구현 중이므로이 패턴이나 저장소 패턴이 필요하지 않습니다. –

답변

1

대신 Generic Repository 패턴을 사용해보십시오. 모델의 모든 유형에 사용할 수있는 Generics를 사용하여 단일 구현으로 단일 인터페이스로 끝납니다.

public interface IRepository<T, K> where T : class 
    { 
     T Add(T item); 
     bool Update(T item); 
     bool DeleteById(K id); 
    } 

구현 데이터 액세스 레이어를 생성하는 이유는

public class EFRepository<T, K> : IRepository<T, K>, IDisposable where T : class 
    { 
     protected readonly DbContext _dbContext; 
     private readonly DbSet<T> _entitySet; 

     public EFRepository(DbContext context) 
     { 
      _dbContext = context; 
      _entitySet = _dbContext.Set<T>(); 
     } 

     public T Add(T item) 
     { 
      item = _entitySet.Add(item); 
      _dbContext.SaveChanges(); 
      return item; 
     } 

     public bool Update(T item) 
     { 
      _entitySet.Attach(item); 
      _dbContext.Entry(item).State = EntityState.Modified; 
      _dbContext.SaveChanges(); 
      return true; 
     } 

     public bool DeleteById(K id) 
     { 
      var item = _entitySet.Find(id); 
      _entitySet.Remove(item); 
      _dbContext.SaveChanges(); 
      return true; 
     } 
} 
+1

이와 같은 "저장소"구조로 EF를 래핑하는 것은 쓸모가 없습니다. 기능은'DbSet'과'DbContext'에 의해 이미 제공됩니다. – Stijn

+2

@Haitham Shaddad 나는 똑같은 말을 사용할 것입니다 : "그렇게해서는 안됩니다."http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/ –

+2

@Stijn이 기능은 DbSet에 있지만 EntityFramework를 제거하고 다른 데이터 액세스 계층을 사용하려는 경우에도 도메인 서비스 또는 UI 계층에서 직접 사용할 수 없으며 주요 리팩토링 없이는 사용할 수 없습니다 –