public RepositoryBase(
     DatabaseContext db)
 {
     _db = db;
     #if DEBUG
     _db.Database.Log = o => System.Diagnostics.Debug.Write(o);
     if (_db.Database.Connection is SqlConnection)
     {
         (_db.Database.Connection as SqlConnection).StatisticsEnabled = true;
     }
     #endif
 }
 public static void Attach(
     DatabaseContext db)
 {
     var json = MemoryCache.Default[nameof(EntityCache)] as string;
     if (!string.IsNullOrWhiteSpace(json))
     {
         var entities = JsonConvert.DeserializeObject<CachedEntities>(json);
         if (entities != null)
         {
             foreach (var artist in entities.Artists)
             {
                 db.Artists.Attach(artist);
             }
             foreach (var character in entities.Characters)
             {
                 db.Characters.Attach(character);
             }
             foreach (var genre in entities.Genres)
             {
                 db.Genres.Attach(genre);
             }
             foreach (var role in entities.Roles)
             {
                 db.Roles.Attach(role);
             }
             foreach (var title in entities.Titles)
             {
                 db.Titles.Attach(title);
             }
             foreach (var titleArtist in entities.TitleArtists)
             {
                 db.TitleArtists.Attach(titleArtist);
             }
             foreach (var titleArtistCharacter in entities.TitleArtistCharacters)
             {
                 db.TitleArtistCharacters.Attach(titleArtistCharacter);
             }
             foreach (var titleGenre in entities.TitleGenres)
             {
                 db.TitleGenres.Attach(titleGenre);
             }
         }
     }
 }
        public static void Refresh()
        {
            using (var db = new DatabaseContext())
            {
                db.Artists.Load();
                db.Characters.Load();
                db.Genres.Load();
                db.Roles.Load();
                db.Titles.Load();
                db.TitleArtists.Load();
                db.TitleArtistCharacters.Load();
                db.TitleGenres.Load();

                var entities = new CachedEntities
                {
                    Artists = db.Artists.Local,
                    Characters = db.Characters.Local,
                    Genres = db.Genres.Local,
                    Roles = db.Roles.Local,
                    Titles = db.Titles.Local,
                    TitleArtists = db.TitleArtists.Local,
                    TitleArtistCharacters = db.TitleArtistCharacters.Local,
                    TitleGenres = db.TitleGenres.Local
                };

                var json = JsonConvert.SerializeObject(
                    entities,
                    Formatting.Indented,
                    settings: new JsonSerializerSettings
                    {
                        ContractResolver = new CachedEntitiesContractResolver()
                    });

                MemoryCache.Default[nameof(EntityCache)] = json;
            }
        }
 public RepositoryExplicitManual(
     DatabaseContext db)
     : base(db)
 {
 }
 protected void Dispose(
     bool disposing)
 {
     if (disposing)
     {
         if (_db != null)
         {
     #if DEBUG
             if (_db.Database.Connection is SqlConnection)
             {
                 var stats = (_db.Database.Connection as SqlConnection).RetrieveStatistics();
                 foreach (var key in stats.Keys)
                 {
                     System.Diagnostics.Debug.WriteLine($"{key}\t{stats[key]}");
                 }
             }
     #endif
             _db.Dispose();
             _db = null;
         }
     }
 }
 public RepositoryStoredProcedures(
     DatabaseContext db)
     : base(db)
 {
 }
        private IRepository GetRepo()
        {
            if (_repo == null && Request != null)
            {
                var db = new DatabaseContext();

                switch (Request["mode"])
                {
                    case MODE_INCLUDE:
                        _repo = new RepositoryExplicitInclude(db);
                        break;

                    case MODE_LAZY:
                        _repo = new RepositoryLazy(db);
                        break;

                    case MODE_SPROC:
                        _repo = new RepositoryStoredProcedures(db);
                        break;

                    case MODE_CACHE:
                        _repo = new RepositoryEntityCache(db);
                        break;

                    case MODE_MANUAL:
                    default:
                        _repo = new RepositoryExplicitManual(db);
                        break;
                }

                //
                // NOTE: We're adding the repo to the HTTP context so we can dispose of it from Application_EndRequest.
                //
                HttpContext.Items["repo"] = _repo;
            }
            return _repo;
        }
 public RepositoryExplicitInclude(
     DatabaseContext db)
     : base(db)
 {
 }