asp.net MVC 5를 사용하여 응용 프로그램을 구축 중이며 IPagedList.MVC 버전 4.5.0.0, AutoMapper 및 Entity Framework로 작업하는 표가 있습니다. 프로젝트에서 IPagedList.MVC, 총 크기를 설정 하시겠습니까?
나는 나의 행동 회담, 나는 동작 방법은 직접 엔티티 프레임 워크에 얘기하고 싶지 않아로서 무엇인가 BusinessLayer 있습니다. 그래서 내 BLL는 다음과 같은 방법이 있습니다 public IPagedList<ActiveContractViewModel> GetAllContracts(string regNumFilter, int page)
{
var lstcontractViewModel = new List<ActiveContractViewModel>();
using (ActiveContractRepository activeContractRepos = new ActiveContractRepository(new UnitOfWork()))
{
var activeContractList = activeContractRepos.All.OrderByDescending(x => x.Id).Include(c => c.Contractor);
if (regNumFilter.Trim().Length > 0)
{
activeContractList = activeContractRepos.All.Where(x => x.RegistrationNumber.Contains(regNumFilter)).OrderByDescending(x => x.Id).Include(c => c.Contractor);
}
foreach (var activeContract in activeContractList)
{
Mapper.CreateMap<DomainClasses.ActiveContract, ActiveContractViewModel>().ForMember(dest => dest.ContractorModel, opts => opts.MapFrom(src => new ContractorViewModel
{
Id = src.Contractor.Id,
Name = src.Contractor.Name,
ContactPerson = src.Contractor.ContactPerson,
Phone = src.Contractor.Phone,
Fax = src.Contractor.Fax,
Address = src.Contractor.Address,
VendorNumber = src.Contractor.VendorNumber,
FederalTaxId = src.Contractor.FederalTaxId
}
));
Mapper.AssertConfigurationIsValid();
lstcontractViewModel.Add(Mapper.Map<ActiveContractViewModel>(activeContract));
}
}
return lstcontractViewModel.ToPagedList(page, 20);
}
내가 (엔티티 프레임 워크에서) 내 ActiveContract 클래스를 매핑하고있어 모델 (ActiveContractVieWModel)가 잘 작동에를, 데이터가 반환 및 페이징 작품입니다. 하지만 foreach 루프가 모든 레코드를 거쳐야한다는 것을 디버깅하는 동안 알아 냈습니다. 2500 레코드가 있으면 큰 목록을 작성하고 ToPageList 메서드에서 사용합니다.
이 주위에 얻을 수있는 더 좋은 방법이 있나요, 그래서 난 내 모델을 구축하고 내가 원하는 단지 20 개 레코드를 작성하여 IPagedList이 전체 크기를 알 수 있습니까?
첫째, 나는 그 CreateMap을 for 루프에서 꺼낼 것이고, 프로그램 시작시 한 번만 수행하면된다. (http://stackoverflow.com/questions/6825244/where-to-place-automapper-createmaps. – Jasen