처음부터 거짓 질문에 사과하고 싶습니다. 나는 MVC가 처음이다.데이터베이스에서 많은 양의 데이터를 pagedList에로드하십시오.
데이터베이스에서 모든 레코드를로드하려고 할 때 인덱스 페이지에서 대기 작업 시간이 초과되었습니다.
검색 필드와 명확한 선택 기능이있는 PagedList를 사용하고 있습니다. 내가 그것을 구현할 수 있도록 PagedList 내가 별도의 뷰 모델을 만들어 사용해야하기 때문에 인덱스 페이지에 대한이
public class BulbBatch
{
public int BulbBatchID { get; set; }
[Required]
public int DeliveryID { get; set; }
public virtual Delivery Delivery { get; set; }
[Required]
public int BulbsAmount { get; set; }
public int? BoxesAmount { get; set; }
[DataType(DataType.Date)]
public DateTime? CoolingDate { get; set; }
public int? BatchLocationID { get; set; }
public virtual Location Location { get; set; }
public string Comments { get; set; }
public string BulbBatchBarCode { get; set; }
public byte[] BulbBatchBarCodeImage { get; set; }
public string BulbBatchImageURL { get; set; }
}
내 뷰 모델이
public class BulbBatchViewModel
{
public int BulbBatchID { get; set; }
[DisplayName("Bulb Type Name")]
public string BulbTypeName { get; set; }
[DisplayName("Bulbs Amount")]
public int BulbsAmount { get; set; }
[DisplayName("Location Name")]
public string LocationName { get; set; }
}
다음처럼
내 도메인 모델 보인다. PagedList를 사용하는 ;
public class BulbBatchListViewModel
{
public int? Page { get; set; }
/// <summary>
/// fields for searching
/// </summary>
public string BulbName { get; set; }
public string BarCode { get; set; }
public string LocationName { get; set; }
/// <summary>
/// using IPageList instead of IEnumerable to create pagination on the view
/// </summary>
public IPagedList<BulbBatchViewModel> SearchResult { get; set; }
public string SearchButton { get; set; }
public string ClearButton { get; set; }
}
그리고 마침내 나는 데이터베이스에서 데이터를 검색하고 내 BulbBatchesListViewModel를 초기화하는 내 컨트롤러 내부의 작업 결과 색인 방법이있다. 나는 여러 데이터베이스
public ActionResult Index(BulbBatchListViewModel model)
{
db.Configuration.ProxyCreationEnabled = false;
// creating list with My viewModel for one item of BulbBatc because I need to replace indexes and add extra data from related tables
List<BulbBatchViewModel> batchesListVM = new List<BulbBatchViewModel>();
IQueryable<BulbBatch> results;
string barcode = "";
if (!string.IsNullOrEmpty(model.BarCode) || model.Page.HasValue)
barcode = '*' + model.BarCode + '*';
if (!string.IsNullOrEmpty(model.SearchButton) || model.Page.HasValue)
{
//get all records from database based upon filters
results = db.BulbBatches.Include(d => d.Delivery).Include(t => t.Delivery.BulbType).Where(b =>
(b.BulbBatchBarCode.Equals(model.BarCode) || string.IsNullOrEmpty(model.BarCode)) &&
(b.Delivery.BulbType.BulbName.ToLower().Equals(model.BulbName) || string.IsNullOrEmpty((model.BulbName))) &&
(b.Location.LocationName.ToLower().Equals(model.LocationName.ToLower()) || string.IsNullOrEmpty(model.LocationName))
);
//initializing of view for each item in result
foreach (var item in results)
{
var batchVM = new BulbBatchViewModel
{
BulbsAmount = item.BulbsAmount,
BulbTypeName = item.Delivery.BulbType.BulbName,
LocationName = item.Location.LocationName,
};
batchesListVM.Add(batchVM);
}
var pageIndex = model.Page ?? 1;
model.SearchResult = batchesListVM.ToPagedList(pageIndex, RecordsPerPage);
}
else
{
//get all records from database without filtering filters
results = db.BulbBatches.Include(d => d.Delivery).Include(t => t.Delivery.BulbType);
foreach (var item in results)
{
var batchVM = new BulbBatchViewModel
{
BulbsAmount = item.BulbsAmount,
BulbTypeName = item.Delivery.BulbType.BulbName,
LocationName = item.Location.LocationName,
};
batchesListVM.Add(batchVM);
}
var pageIndex = model.Page ?? 1;
model.SearchResult = batchesListVM.ToPagedList(pageIndex, RecordsPerPage);
}
if (!string.IsNullOrEmpty(model.ClearButton))
{
model.BarCode = "";
model.BulbName = "";
model.LocationName = "";
ModelState.Clear();
}
return View(model);
}
내가 인덱스 페이지 처음으로 가고있을 때 (/ 필터링 어떤 종류없이 검색) 내가 가지고에 요청의 양을 감소하기 위해 문을 포함하여 열망로드를 구현하려 오류이 내 다른 문장의 일부
results = db.BulbBatches.Include(d => d.Delivery).Include(t => t.Delivery.BulbType);
foreach (var item in results)
{
var batchVM = new BulbBatchViewModel
을 ... "대기 작동이 시간 초과되었습니다"
W 암탉 내가 완벽하게 작동하는 데이터베이스에서 10 행을로드하려고했지만 내가 그것을 넣어 1000 중지합니다.
이 문제를 해결하는 데 도움을주십시오.
가벼운 속성과 모델 만 있습니다. 어쩌면 데이터베이스 연결이 느린 것일까 요? – Marius
@ Marus, nope.사실 내가 문제가 필드에 의해 발생했다는 것을 알았던 것처럼 public byte [] BulbBatchBarCodeImage {get; 세트; } 내 모델 안에. 그래서 내가 한 일은 선택 코드를 조금 바꿨고 더 이상 BarCodeImage 필드를로드하지 않게되었습니다. –