/// <summary> /// データベースに関する初期化処理 /// </summary> private void InitializeAppDatabase() { mLogger.Trace("IN"); AppMetaInfo apMetadata = null; bool isMigrate = false; const string appdb_structure_version_key = "APPDB_VER"; var @dbc = (AppDbContext)mContainer.GetInstance <IAppDbContext> (); // DIコンテナがリソースの開放を行う bool isInitializeDatabase = false; var @repo = new AppAppMetaInfoRepository(@dbc); try { apMetadata = @repo.FindBy(p => p.Key == appdb_structure_version_key).FirstOrDefault(); if (apMetadata == null) { isInitializeDatabase = true; } } catch (Exception) { mLogger.Info($"データベースに、{@appdb_structure_version_key}が見つからないため、初期化処理として継続します。"); isInitializeDatabase = true; } if (isInitializeDatabase) { // データベースにテーブルなどの構造を初期化する string sqltext = ""; System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); string filePath = string.Format("Foxpict.Service.Web.Assets.Sql.{0}.Initialize_sql.txt", "App"); mLogger.Info($"初期化SQLを'{@filePath}'から読み込みます"); using (var stream = assm.GetManifestResourceStream(filePath)) { if (stream == null) { throw new ApplicationException("初期化SQLファイルの読み込みに失敗しました。"); } using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } mLogger.Info("SQLファイル({FilePath})から、CREATEを読み込みます", filePath); @dbc.Database.ExecuteSqlCommand(sqltext); @dbc.SaveChanges(); // 初期データを格納する var repo_Category = new CategoryRepository(@dbc); repo_Category.Add(new Category { Id = 1L, Name = "ROOT" }); apMetadata = @repo.FindBy(p => p.Key == appdb_structure_version_key).FirstOrDefault(); } if (apMetadata == null) { apMetadata = new AppMetaInfo { Key = appdb_structure_version_key, Value = "1.0.0" }; @repo.Add(apMetadata); @repo.Save(); // AppMetadataが存在しない場合のみ、初期値の書き込みを行う。 // 初期値は、キッティングから取得したリソースパスが示すSQLファイルからデータベースの初期値を読み込む。 if (this._AssemblyParameter.Params.ContainsKey("InitializeSqlAppDb")) { System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); var initializeSqlFilePath = this._AssemblyParameter.Params["InitializeSqlAppDb"]; mLogger.Info($"アプリケーションデータベース初期化SQLファイルを読み込みます path:{initializeSqlFilePath}"); string sqltext = ""; using (var stream = assm.GetManifestResourceStream(initializeSqlFilePath)) { if (stream == null) { throw new ApplicationException("初期化SQLファイルの読み込みに失敗しました。"); } using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } @dbc.Database.ExecuteSqlCommand(sqltext); @dbc.SaveChanges(); } } mLogger.Info("アプリケーションデータベースにマイグレーションが必要かチェックします。"); string currentVersion = apMetadata.Value; string nextVersion = currentVersion; do { currentVersion = nextVersion; nextVersion = UpgradeFromResource("App", currentVersion, @dbc); if (nextVersion != currentVersion) { isMigrate = true; } } while (nextVersion != currentVersion); if (isMigrate) { mLogger.Info($"アプリケーションデータベースにマイグレーション({@apMetadata.Value}->{@nextVersion})を実施しました。"); apMetadata.Value = nextVersion; @repo.Save(); } @dbc.SaveChanges(); mLogger.Trace("END"); }
/// <summary> /// データベースに関する初期化処理 /// </summary> private void InitializeThumbnailDatabase() { AppMetaInfo apMetadata = null; bool isMigrate = false; const string appdb_structure_version_key = "APPDB_VER"; var @dbc = (ThumbnailDbContext)_Container.GetInstance <IThumbnailDbContext>(); // DIコンテナがリソースの開放を行う bool isInitializeDatabase = false; var @repo = new ThumbnailAppMetaInfoRepository(@dbc); try { apMetadata = @repo.FindBy(p => p.Key == appdb_structure_version_key).FirstOrDefault(); if (apMetadata == null) { isInitializeDatabase = true; } } catch (Exception) { isInitializeDatabase = true; } if (isInitializeDatabase) { // データベースにテーブルなどの構造を初期化する string sqltext = ""; System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); using (var stream = assm.GetManifestResourceStream(string.Format("pixstock.service.web.Assets.Sql.{0}.Initialize_sql.txt", "Thumbnail"))) { using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } _logger.Trace("SQLファイルから、CREATEを読み込みます"); @dbc.Database.ExecuteSqlCommand(sqltext); @dbc.SaveChanges(); apMetadata = @repo.FindBy(p => p.Key == appdb_structure_version_key).FirstOrDefault(); } if (apMetadata == null) { apMetadata = new AppMetaInfo { Key = appdb_structure_version_key, Value = "1.0.0" }; @repo.Add(apMetadata); @repo.Save(); } string currentVersion = apMetadata.Value; string nextVersion = currentVersion; do { currentVersion = nextVersion; nextVersion = UpgradeFromResource("Thumbnail", currentVersion, @dbc); if (nextVersion != currentVersion) { isMigrate = true; } } while (nextVersion != currentVersion); if (isMigrate) { apMetadata.Value = nextVersion; @repo.Save(); } @dbc.SaveChanges(); }