T4 템플릿으로 전체 데이터 액세스 레이어를 생성하는 방법에 대해 좀 더 설명하는 도움말이나 포인터를 찾고 있습니다. 예를 들어 INSERT 등의 모든 문장과이를 구현하는 C# 메소드.t4 템플릿으로 데이터 액세스 레이어 생성
답변
대신 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;
}
}
이와 같은 "저장소"구조로 EF를 래핑하는 것은 쓸모가 없습니다. 기능은'DbSet'과'DbContext'에 의해 이미 제공됩니다. – Stijn
@Haitham Shaddad 나는 똑같은 말을 사용할 것입니다 : "그렇게해서는 안됩니다."http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/ –
@Stijn이 기능은 DbSet에 있지만 EntityFramework를 제거하고 다른 데이터 액세스 계층을 사용하려는 경우에도 도메인 서비스 또는 UI 계층에서 직접 사용할 수 없으며 주요 리팩토링 없이는 사용할 수 없습니다 –
. @Marco Munnik – zahed
EF를 사용하고 싶지 않은 이유가 있습니까? 그런 다음 EF가 이미 저장소 패턴/작업 단위 (UOW)를 구현 중이므로이 패턴이나 저장소 패턴이 필요하지 않습니다. –