Exemple #1
0
 public UnitOfWork(MediaCloudContext context)
 {
     _context        = context;
     MovieLibraries  = new MovieLibraryRepository(context);
     SeriesLibraries = new SeriesLibraryRepository(context);
     Libraries       = new LibraryRepository(context);
     Items           = new ItemRepository(context);
     Genres          = new GenreRepository(context);
     Movies          = new MovieRepository(context);
     Seasons         = new SeasonRepository(context);
     Episodes        = new EpisodeRepository(context);
     Media           = new MediaRepository(context);
 }
        public override async Task AddOrUpdateInclusive(MovieLibrary library)
        {
            IList <ItemLibrary> existingItemLibraries = MediaCloudContext.ItemLibraries.ToList();
            IList <ItemGenre>   existingItemGenres    = MediaCloudContext.ItemGenres.ToList();

            //Don't re-add existing items
            foreach (ItemLibrary itemLibrary in library.ItemLibraries)
            {
                ItemLibrary existingItemLibrary = existingItemLibraries.FirstOrDefault(x => x.ItemId == itemLibrary.Item.Id);

                if (existingItemLibrary != null)
                {
                    MediaCloudContext.Entry(itemLibrary.Item).State = EntityState.Unchanged;
                    itemLibrary.ItemId = existingItemLibrary.ItemId;
                }
                else
                {
                    existingItemLibraries.Add(itemLibrary);
                }

                //Don't re-add existing genres
                foreach (ItemGenre itemGenre in itemLibrary.Item.ItemGenres)
                {
                    ItemGenre existingItemGenre =
                        existingItemGenres.FirstOrDefault(x => x.GenreId == itemGenre.Genre.Id);

                    if (existingItemGenre != null)
                    {
                        Entities.Genre localEntry = MediaCloudContext.Set <Entities.Genre>().Local.FirstOrDefault(entry => entry.Id == itemGenre.Genre.Id);

                        //Make sure an already attached genre isn't attached again
                        if (localEntry != null)
                        {
                            MediaCloudContext.Entry(localEntry).State = EntityState.Detached;
                        }

                        MediaCloudContext.Entry(itemGenre.Genre).State = EntityState.Unchanged;
                        itemGenre.GenreId = existingItemGenre.GenreId;
                    }
                    else
                    {
                        existingItemGenres.Add(itemGenre);
                    }
                }
            }

            await MediaCloudContext.MovieLibraries.AddAsync(library);

            await MediaCloudContext.SaveChangesAsync();
        }
 public MovieLibraryRepository(MediaCloudContext context) : base(context)
 {
 }
Exemple #4
0
 public SeriesLibraryRepository(MediaCloudContext context) : base(context)
 {
 }