我有一個統計的次數計數器的觀點是呈現:巨大的性差異
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