我在ASP.NET MVC 5中有一个视图,该视图一次返回一个实体的所有记录,即40,000条以上的记录。 (启用了延迟加载,因此它返回的数据不止于此。)正如我所料,我总是收到内存不足异常。因此,我需要限制显示的数据,但在更改页面或执行搜索时,请保留所有可显示的数据。
这是查询数据源以检索结果的通用方法。 Manager.AllAsync
是一种通用的Entity Framework方法,它查询通过TEntity
提供的实体:
public async Task<ActionResult> DataTableAsync<TEntity>(AlertModel alert, string viewName = null) where TEntity : class
{
// get data
var data = (from a in await Manager.AllAsync<TEntity>()
select a).ToList();
// create model with alert
var response = new TableModel<TEntity>
{
Alert = alert,
Data = data
};
// return partial data view
return PartialView(viewName ?? $"_{typeof(TEntity).Name}Table", response);
}
这是TableModel
public class TableModel<TEntity>
{
/// <summary>
/// Alert for the model.
/// </summary>
public AlertModel Alert { get; set; }
/// <summary>
/// Data from the database.
/// </summary>
public IList<TEntity> Data { get; set; }
}
这是AllAsync
public virtual async Task<IList<T>> AllAsync<T>() where T : class
{
try
{
return await Context.Set<T>().ToListAsync();
}
catch (ArgumentNullException ex)
{
throw new InvalidOperationException($"Invalid state: {typeof(T).Name} DbSet is null.", ex);
}
}
然后,视图仅使用foreach
遍历记录。
这是配置通用DataTables JavaScript的方式:
function makeDataTable(id) {
var selector = '#' + id;
$(selector).DataTable({
order: [],
search: {
smart: false
},
stateSave: true,
deferRender: true,
columnDefs: [{
targets: 'no-sort',
orderable: false
},
{
targets: 'date-col',
type: 'date',
orderSequence: [
'desc',
'asc'
]
}],
lengthMenu: [
[10, 15, 20, -1],
[10, 15, 20, 'All']
]
});
$(selector).width('100%');
}
我不确定DataTables Show
选项如何与仅一次显示这么多的方法通信,或者不确定如何Show All
而不遇到out of memory
异常。我知道DataTables具有Server Side Processing,但是现在检索数据的方式是Linq to Entities(从数据源方法)。我发现一些文章解释了我该怎么做Like this one for example,但是这篇文章返回了JsonResult
。使这种方法不那么通用会更容易吗?
答案 0 :(得分:0)
您可以通过多种方式解决此问题,但我会给您提供许多链接 给你启发如何解决问题的灵感,我是我 最后一个解决方案,我只创建这样的模型
接口IDatatables,其中T:类{字符串请求URL {get; 组; }
ICollection列按钮编辑{get;设置;}
按钮编辑{get; set;} Ect ..}
在您的ActionResult中,您需要构建一个与 请求数据表的参数这是您可以找到的一些链接 与数据表集成的一些启发 https://www.c-sharpcorner.com/article/using-datatables-grid-with-asp-net-mvc/ https://gist.github.com/OllieJones/7448933cc85ee740e990383e4fded412