Beispiel #1
0
        public void Fetch()
        {
            using (var uow = (IUnitOfWork)_services.GetService(typeof(IUnitOfWork)))
            {
                var sportRepository = uow.GetRepository <Sport>();

                //can be stored in memory and update it after each feed pull
                var currentSport = sportRepository
                                   .FirstOrDefault(x => x.Id == SoccerId,
                                                   include: x =>
                                                   x.Include(sp => sp.Events)
                                                   .ThenInclude(ev => ev.Matches)
                                                   .ThenInclude(ma => ma.Bets)
                                                   .ThenInclude(bet => bet.Odds));

                //var updatedSport = _feed.GetSports(SoccerId);
                var updatedSport      = XmlUtils.Deserialize <XmlSportsModel>(XmlUtils.GetXmlString("soccer.xml"));
                var currentSportModel = _mapper.Map <SportModel>(currentSport);

                if (currentSport == null)// Initial DB seed
                {
                    var newSport = _mapper.Map <Sport>(updatedSport.Sport);
                    sportRepository.Add(newSport);
                }
                else
                {
                    var syncRequirement = DiffChecker.GetSyncRequirement(currentSportModel.Events, updatedSport.Sport.Events);
                    if (syncRequirement.IsSyncRequired)
                    {
                        //this is the proper way for db Sync
                        //eventRepository.Sync(updatedEventEntities);

                        // this is a workaround on Sync method. For more info check README.md
                        SyncEventInDb(currentSport, updatedSport.Sport, syncRequirement, uow);
                    }
                }

                uow.BulkSaveChanges();
            }
        }