public async Task <ActionResult> DetailsAsync(int id = -1) { //从数据库中读取数据 if (!_DBServices.HasAnimeID(id)) { return(NotFound()); } var key = new KEY { Key = CacheKey.Anime_One(id).ToCharArray() }; if (!_DBServices.GetDate(key, out Anime Anime)) { Anime = await _DBServices.GetDateOneAsync <Anime>(db => db.Where(a => a.AnimeID == id) .Include(a => a.Souce) .Include(a => a.Tags) .Include(a => a.AnimeComms)); _DBServices.SetCache(key, Anime); } key = new KEY { Key = CacheKey.Blog_One_ByAnimeID(id).ToCharArray() }; if (!_DBServices.GetDate(key, out ICollection <Blog> blogs)) { blogs = await _DBServices.GetDateToListAsync <Blog>(db => db.Where(b => b.AnimeID == id).OrderByDescending(a => a.Time).Take(10)); _DBServices.SetCache(key, blogs); } //初始化数据 var userAnimeNumber = 0; //动画观看集数 var IsSignIn = false; //用户是否登录 var IsSub = false; //用户是否订阅某动画 var IsShowEdit = false; //用户是否可以编辑 ICollection <AnimeMemo> memo = new List <AnimeMemo>(); //用户写下的MEMO //未登录也可以显示: ICollection <Blog> blog = blogs.GetListDate(); //用户对该动画的长评短评 ICollection <AnimeTag> animeTags = new List <AnimeTag>(); //动画的标签 ICollection <AnimeSouce> animeSouces = new List <AnimeSouce>(); //动画的播放源 ICollection <AnimeComm> animeComms = new List <AnimeComm>(); //动画的评论 //var SubNum = 0; //用户订阅量(暂时用不到呢) animeTags = Anime.Tags; animeSouces = Anime.Souce; animeComms = Anime.AnimeComms; if (Anime.AnimeNumUpdata())//计算动画集数 { //需要更新动画信息 _DBServices.SetCache(key, Anime);//全部的数据读取好之后,缓存一下 await _DBServices.UpdateAsync(Anime); } //动画集数列表的相关计算 AnimeNumberInfo animeNumberInfo = Anime.AnimeNumPage(); if (!(IsSignIn = _signInManager.IsSignedIn(HttpContext.User))) //如果没登陆,后面的就不需要处理了 { return(View( viewName: "Bangumi_OneAnime", model: new Bangumi_OneAnime { Anime = Anime, UserAnimeNumber = userAnimeNumber, Memos = memo, IsSub = IsSub, IsSignIn = IsSignIn, IsShowEdit = IsShowEdit, Page = animeNumberInfo } )); } //如果没有登陆,返回Null var userID = _userManager.GetUserId(HttpContext.User); //尝试读取缓存 key = new KEY { Key = CacheKey.Anime_User_Info(userID, id).ToCharArray() }; if (!_DBServices.GetDate(key, out AnimeUserInfo Infos)) { Infos = await _DBServices.GetDateOneAsync <AnimeUserInfo>(db => db.Where(info => info.Users.Id == userID && info.SubAnime.AnimeID == id) .Include(info => info.Memos)); _DBServices.SetCache(key, Infos); } if (Infos != null)//没有订阅 { IsSub = true; memo = Infos.Memos; userAnimeNumber = Infos.NowAnimeNum; } //检查权限 var EditAnime = await _authorizationService.AuthorizeAsync(HttpContext.User, Final.Yuri_Yuri4); IsShowEdit = EditAnime.Succeeded; return(View( viewName: "Bangumi_OneAnime", model: new Bangumi_OneAnime { Anime = Anime, UserAnimeNumber = userAnimeNumber, Memos = memo, IsSub = IsSub, IsSignIn = IsSignIn, IsShowEdit = IsShowEdit, Page = animeNumberInfo } )); }