/// <summary> /// データベースに関する初期化処理 /// </summary> private void InitializeAppDatabase() { 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) { isInitializeDatabase = true; } if (isInitializeDatabase) { // データベースにテーブルなどの構造を初期化する string sqltext = ""; System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); string filePath = string.Format("Pixstock.Service.Web.Assets.Sql.{0}.Initialize_sql.txt", "App"); using (var stream = assm.GetManifestResourceStream(filePath)) { using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } _logger.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"]; _logger.Info($"アプリケーションデータベース初期化SQLファイルを読み込みます path:{initializeSqlFilePath}"); string sqltext = ""; using (var stream = assm.GetManifestResourceStream(initializeSqlFilePath)) { using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } @dbc.Database.ExecuteSqlCommand(sqltext); @dbc.SaveChanges(); } } 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) { apMetadata.Value = nextVersion; @repo.Save(); } @dbc.SaveChanges(); }
/// <summary> /// データベースに関する初期化処理 /// </summary> private void InitializeAppDatabase() { AppMetaInfo apMetadata = null; bool isMigrate = false; const string appdb_structure_version_key = "APPDB_VER"; var @dbc = (AppDbContext)_Container.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) { isInitializeDatabase = true; } if (isInitializeDatabase) { // データベースにテーブルなどの構造を初期化する string sqltext = ""; System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); using (var stream = assm.GetManifestResourceStream(string.Format("Pixstock.Nc.Srv.Assets.Sql.{0}.Initialize_sql.txt", "App"))) { using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } _logger.Trace("SQLファイルから、CREATEを読み込みます"); @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(); } 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) { apMetadata.Value = nextVersion; @repo.Save(); } @dbc.SaveChanges(); }