继使用EF5 Code First,SQL Server 2008 R2 db,Generic Repository和Unit of Work模式之前的问题之后
我有以下功能
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秒才能运行,我有点疑惑为什么需要这么长时间,预计不到一秒钟,是否有任何建议可以加快速度。
我们要做的就是更改两个图形对象的队列位置 - 围绕位置的swop队列位置 - 我们当前的队列位置,队列中的下一个位置基于位置。
不确定这是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();
}
我有一种感觉可能不得不改变它以接受两个对象,然后只是进行更新,但这可能掩盖了一个问题,我们将在以后解决,因为这应该是直截了当的。
答案 0 :(得分:0)
这是我们在保存呼叫上设置的通知服务(因此其他服务/应用程序知道数据库上已经更改了什么) - 这导致了一个异常,一旦我们输入了正确的IP,就会增加延迟延迟大约是0.7毫秒,这正是我所期待的