/// <summary> /// /// </summary> /// <param name="resourcePath"></param> /// <param name="dbc">データベース</param> private void UpgradeDatabase(string resourcePath, KatalibDbContext dbc) { string sqltext = ""; System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); using (var stream = assm.GetManifestResourceStream(resourcePath)) { using (StreamReader reader = new StreamReader(stream)) { sqltext = reader.ReadToEnd(); } } dbc.Database.ExecuteSqlCommand(sqltext); }
/// <summary> /// 現在のバージョンからマイグレーションするファイルがリソースファイルにあるか探します。 /// リソースファイルがある場合はそのファイルに含まれるSQLを実行し、ファイル名からマイグレーション後のバージョンを取得します。 /// </summary> /// <param name="dbselect"></param> /// <param name="version"></param> /// <param name="dbc"></param> /// <returns>次のバージョン番号。マイグレーションを実施しなかった場合は、versionの値がそのまま帰ります。</returns> private string UpgradeFromResource(string dbselect, string version, KatalibDbContext @dbc) { System.Reflection.Assembly assm = System.Reflection.Assembly.GetExecutingAssembly(); string currentVersion = version; var mss = assm.GetManifestResourceNames(); // この方法で読み込みができるリソースファイルの種類は「埋め込みリソース」を設定したもののみです。 var r = new Regex(string.Format("Pixstock.Service.Web.Assets.Sql.{0}.{1}", dbselect, "upgrade - " + currentVersion + "-(.+)\\.txt")); foreach (var rf in assm.GetManifestResourceNames()) { var matcher = r.Match(rf); if (matcher.Success && matcher.Groups.Count > 1) { _logger.Info("{0}データベースのアップデート({1} -> {2})", dbselect, version, matcher.Groups[1].Value); UpgradeDatabase(rf, @dbc); currentVersion = matcher.Groups[1].Value; // 正規表現にマッチした箇所が、マイグレート後のバージョンになります。 } } return(currentVersion); }