[英]Speed up EF5 Code First query
使用EF5代碼優先,SQL Server 2008 R2數據庫,通用存儲庫和工作單元模式對先前的問題進行后續討論
我有以下功能
public static void MoveGraphicPosition(int queueId, int graphicId, bool moveUp)
{
using (var unitOfWork = new GraphicUnitOfWork(ConnGraphics, false))
{
var sourceGraphic = unitOfWork.GraphicRepository.FindSingle(g => g.Id == graphicId);
if (sourceGraphic == null) return;
var startPosition = sourceGraphic.QueuePosition;
Graphic targetGraphic;
if (moveUp)
{
targetGraphic =
unitOfWork.PlayoutQueueRepository.FindSingle(q => q.Id == queueId, q => q.Graphics)
.Graphics.Where(g => g.QueuePosition < startPosition)
.OrderByDescending(g => g.QueuePosition)
.Take(1).FirstOrDefault();
}
else
{
targetGraphic =
unitOfWork.PlayoutQueueRepository.FindSingle(q=> q.Id == queueId, q => q.Graphics)
.Graphics.Where(g => g.QueuePosition > startPosition)
.OrderBy(g => g.QueuePosition)
.Take(1).FirstOrDefault();
}
// Swop the positions
if (targetGraphic == null) return;
sourceGraphic.QueuePosition = targetGraphic.QueuePosition;
targetGraphic.QueuePosition = startPosition;
unitOfWork.GraphicRepository.Update(sourceGraphic);
unitOfWork.GraphicRepository.Update(targetGraphic);
// Save to database
unitOfWork.Save();
}
}
通過Web Api調用運行此方法大約需要2秒鍾,我對於為什么需要這么長的時間(預計不到一秒鍾)感到困惑,是否有任何建議可以加快此過程。
我們想要做的就是更改兩個圖形對象的隊列位置-圍繞隊列位置-我們當前的對象和根據位置在隊列中的下一個對象。
不知道這是EF5還是我的LINQ查詢效率低下。
存儲庫上的FindSingle看起來像這樣
public T FindSingle(Expression<Func<T, bool>> predicate = null, params Expression<Func<T, object>>[] includes)
{
var set = FindIncluding(includes);
return (predicate == null) ? set.FirstOrDefault() : set.FirstOrDefault(predicate);
}
public IQueryable<T> FindIncluding(params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> set = _context.GetEntitySet<T>();
if (includeProperties != null)
{
foreach (var include in includeProperties)
{
set = set.Include(include);
}
}
return set.AsQueryable();
}
我有一種感覺,可能必須更改它以容納兩個對象,然后進行更新,但這可能掩蓋了一個問題,我們必須稍后解決,因為這應該很簡單。
這是我們在保存調用中設置的通知服務(因此其他服務/應用程序知道數據庫中已更改的內容)-這導致了異常,從而增加了延遲,一旦我們輸入了正確的IP,延遲就在0.7ms這是我所期望的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.