다른 DB 컨텍스트를 사용하는 다른 모듈에서 사용할 인터페이스로 구현되는 일반 데이터 액세스 레이어가 있습니다. 여기 일반 데이터 액세스 레이어에서 매개 변수로 dbcontext를 전달하는 방법
코드입니다 :public class GenericDataRepository<T> : IGenericDataRepository<T> where T : class
{
public virtual IList<T> Get(Func<T, bool> filter, int page, int pageSize, string[] includePaths = null, params SortExpression<T>[] sortExpressions)
{
List<T> list;
using (var context = new _DbContext())
{
IQueryable<T> dbQuery = context.Set<T>();
if (includePaths != null)
{
for (var i = 0; i < includePaths.Count(); i++)
{
dbQuery = dbQuery.Include(includePaths[i]);
}
}
if (filter != null)
{
dbQuery = dbQuery.Where(filter).AsQueryable();
}
IOrderedEnumerable<T> orderedQuery = null;
for (var i = 0; i < sortExpressions.Count(); i++)
{
if (i == 0)
{
if (sortExpressions[i].SortDirection == ListSortDirection.Ascending)
{
orderedQuery = dbQuery.OrderBy(sortExpressions[i].SortBy);
}
else
{
orderedQuery = dbQuery.OrderByDescending(sortExpressions[i].SortBy);
}
}
else
{
if (sortExpressions[i].SortDirection == ListSortDirection.Ascending)
{
orderedQuery = orderedQuery.ThenBy(sortExpressions[i].SortBy);
}
else
{
orderedQuery = orderedQuery.ThenByDescending(sortExpressions[i].SortBy);
}
}
dbQuery = orderedQuery.AsQueryable();
}
dbQuery = dbQuery.Skip(((int)page - 1) * (int)pageSize);
dbQuery = dbQuery.Take((int)pageSize);
list = dbQuery
.ToList<T>();
}
return list;
}
}
이 GenericDataRepository 계층에서, 나는 DB 컨텍스트 클래스가 없습니다. 이 GenericDataRepository가 DB 컨텍스트를 다른 호출 모듈에서 들어오는 매개 변수로 받아 들여 Get 메서드에서 작성된 작업을 수행하기를 원합니다.
내가 방법을 점점
using (var context = new _DbContext())
을 사용하여 볼 수 있습니다. 이 목표를 달성하기 위해 GenericDataRepository를 작성하는 방법을 모르겠습니다.
이 내 인터페이스
public interface IGenericDataRepository<T> where T : class
{
IList<T> Get(Func<T, bool> filter, int page, int pageSize, string[] includePaths = null, params SortExpression<T>[] sortExpressions);
}
}
:
일반 데이터 저장소를 사용하는 층 Dbcontext에 액세스 할 수 있다고 가정하면, 그들은 이제 다음의 방식으로 저장소를 인스턴스화 할 저장소가 메소드 당 컨텍스트를 사용하는 것은 드문 경우입니다. 저장소 별 컨텍스트도 있습니다. 일반적으로 리포지토리는 포괄적 인 작업 단위 (UOW)의 컨텍스트에서 작동합니다. 컨텍스트를 주입하는 방법에 대한 더 큰 그림에 달려 있습니다. 귀하의 질문에 답변하기에는 너무 좁습니다. –
나는 다른 저장소를 위해 CRUD opetation에 대한 저장소의 작업 인 일반 저장소를 사용하고 있습니다. 모든 모듈은 saperate db 컨텍스트를 솔루션의 differenet 모듈을 가지고있다 –
그냥 Get 메서드에'DbContext' 매개 변수를 추가하십시오. –