我有一个统计的次数计数器的观点是呈现:巨大的性差异
public class News
{
[Key]
public int Id { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DatePostedOn { get; set; }
public DateTime DateModified { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Meta { get; set; }
public string UrlSlug { get; set; }
public bool Popular { get; set; }
public int Position { get; set; }
public int Views { get; set; } // <---- COUNTER
}
每次加载页面时,我有+1到浏览次数:
public virtual ActionResult Detail(string urlSlug)
{
News news = db.News
.Include("Category")
.Where(n => n.UrlSlug.Equals(urlSlug))
.FirstOrDefault();
NewsDetailVM vm = Mapper.Map<News, NewsDetailVM>(news);
vm.RelatedNews = db.News
.Where(r => r.Category.Id == news.Category.Id)
.Where(r => r.Hidden == false)
.Where(r => r.Id != news.Id)
.OrderByDescending(r => r.DateCreated)
.Take(3)
.Select(r => new NewsRelatedVM()
{
Title = r.Title,
Date = r.DateCreated,
UrlSlug = r.UrlSlug,
CategoryName = r.Category.Name,
CategoryURLSlug = r.Category.UrlSlug,
PictureURL = r.Pictures.Where(p => p.Type == 2).FirstOrDefault().Filename
})
.ToList();
vm.CategoriesList = db.Categories
.Where(c => c.Channel == 1)
.Project().To<NewsListCategoryItemVM>()
.ToList();
news.Views = news.Views + 1; // <-- COUNTER UPDATE
db.SaveChanges();
return View(vm);
}
问题是,例如在星期六,我在当天发布的新闻有6464个,Google分析为新闻控制器呈现了2359个综合浏览量。
从哪里来这个差异?我在柜台做错了什么?
嗨卢克,谢谢!但是,如果操作只是基于选择来呈现新闻,是不是一个非常快速的操作,可以在一次访问中进行更新并避免出现问题? – Patrick
我知道你在说什么,但是EF的体重很重。您正在执行一些数据的选择,然后是更多的数据,在选择数据和增加计数器之间将两个结果集映射到对象。增加计数器的唯一保证方法是让数据库引擎为你处理它:)。 – Luke
您是否能够达到此目的? – Luke