/// <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();
        }
Ejemplo n.º 2
0
        /// <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();
        }