use*_*310 2 c# asp.net-mvc entity-framework
我有课堂ProcessMessage和ProcessMessage细节.有1对多的关系,1 ProcessMessage可以有很多ProcessMessageDetail.我使用Entity Framework 6编写了代码,但运行速度非常慢.
任何优化技巧?如果你在第3步看到它,我正在使用ToList().第1步和第2步是IQueryable.
// 1
var query = UnitOfWorkAsync.Repository<ProcessMessage>()
.Queryable()
.Include(x => x.ProcessMessages)
.Include(x => x.TestDetail)
.AsNoTracking()
.AsExpandable()
.Where(Query(loggedProcess, status))
.Take(1000)
.AsQueryable();
// 2
query = query.OrderBy(sortBy + (reverse ? " descending" : "")).AsQueryable();
// 3
return query
.ToList()
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
public class ProcessMessage
{
public ProcessMessage()
{
ProcessMessages = new List<ProcessMessageDetail>();
}
public int ProcessMessageId { get; set; }
public int? LoggedProcessId { get; set; }
public int? ProcessMessageTypeId { get; set; }
public virtual LoggedProcess LoggedProcess { get; set; }
public virtual ICollection<ProcessMessageDetail> ProcessMessages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
小智 5
最可能的罪魁祸首是第三步中的第一个ToList.
// 3
return query
//.ToList() //This will cause performance issues
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
Run Code Online (Sandbox Code Playgroud)
点击此处查看说明:多次调用ToList会影响性能吗?
如果你离第一页太远,Skip和Take也可能有问题,请检查一下:实体Framerowk Skip/Take在跳过的数字很大时很慢
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |