나는 당신이 당신의 도메인의 디자인을 변경해야 두려워, 잘 구현하지 않을 방법 저장소 패턴입니다. 우선 당신은 다음과 같은 간단한 도메인 모델 뭔가를 기본 클래스를 가져야한다 (물론이 필요하지 않습니다) :
public interface IRepository<TEntity> where TEntity : EntityBase {
TEntity FindOne(int id);
}
:
public class EntityBase {
public virtual int Id { get; set; }
}
은 다음 일반적인 IRepository 인터페이스가 있어야합니다 당신이 일반적인 IRepository 인터페이스를 구현 한 후 다음과 같이 사용하면 일반적인 인터페이스로부터 상속 된 콘크리트 저장소 클래스가해야
public class Repository<TEntity> : IRepository<TEntity> where TEntity : EntityBase {
private readonly DbContext _dbContext;
private readonly DbSet<TEntity> _dbSet;
public Repository(DbContext dbContext) {
_dbContext = dbContext;
_dbSet = _dbContext.Set<TEntity>();
}
public IQueryable<TEntity> Entities {
get { return _dbSet; }
}
public TEntity FindOne(int id) {
return Entities.FirstOrDefault(t => t.Id == id);
}
}
이 깔끔하네요, 여기에서 볼 수 있듯이 Repository 클래스 생성자에 대한 DbContext 매개 변수가 필요합니다. 또한 우리는 엔티티베이스의 Id 속성을 이용하여 정확히 원하는 것을 찾습니다.
지금까지 리포지토리 패턴의 기초를 구현 했으므로 지금부터 각 도메인 엔터티에 대한 리포지토리 클래스를 만들어야합니다. 의 당신이 여기 부탁 한 것을 구현하자
public class ProductRepository : Repository<Product> {
public ProductRepository(DbContext dbContext)
: base(dbContext) {
}
public IEnumerable<Product> GetProductList(string Type) {
IEnumerable<Product> fLit = from p in Entities select p;
return fLit;
}
}
희망이 도움이됩니다.
컴파일러에서 말하는 것처럼 캐스트를 사용하십시오. –
나는 동의 할 것이고, 궁금하다. 컴파일러 오류 중 어떤 부분이 혼란 스럽거나 명확하지 않은가? –
'string Type' 매개 변수를 삭제할 수 있습니다. 'typeof (TEntity) .FullName'으로 비슷한 정보를 얻을 수 있습니다. –