コード例 #1
0
        private async Task <JsonResult> UpdateItemsAsync <TItem>(IList <TItem> items) where TItem : BaseModel, IPageItem
        {
            var result = new ResultModel();

            if (!items.Any())
            {
                result.IsSuccess = true;
                return(Json(result));
            }

            var pageId      = items.FirstOrDefault()?.PageId;
            var pageScripts = _pagesContext.Set <TItem>().Where(x => x.PageId.Equals(pageId)).ToList();

            foreach (var prev in pageScripts)
            {
                var up = items.FirstOrDefault(x => x.Id.Equals(prev.Id));
                if (up == null)
                {
                    _pagesContext.Set <TItem>().Remove(prev);
                }
                else if (prev.Order != up.Order || prev.Script != up.Script)
                {
                    prev.Script = up.Script;
                    prev.Order  = up.Order;
                    _pagesContext.Set <TItem>().Update(prev);
                }
            }

            var news = items.Where(x => x.Id == Guid.Empty).Select(x => new
            {
                PageId = pageId,
                x.Script,
                x.Order
            }).Adapt <IEnumerable <TItem> >().ToList();

            if (news.Any())
            {
                _pagesContext.Set <TItem>().AddRange(news);
            }

            try
            {
                await _pagesContext.SaveChangesAsync();

                RemovePageFromCache(pageId.GetValueOrDefault(Guid.Empty));
                result.IsSuccess = true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }

            return(new JsonResult(result));
        }