DbMigrator を使用して移行を実行する際に問題が発生しました。どういうわけか、移行クラスが実行されず、もちろんデータベースに反映されません。
私が実装しようとしているのは、移行をバージョンにグループ化することです。基本的に、すべてのバージョンの派生元である Version 基本クラスがあります。
たとえば、バージョン 1.0.0.0 に対応するクラス Version1000 があります。
バージョン クラスには、対応するバージョンに関連する移行の実行を担当する ExecuteMigrations というメソッドがあります。
バージョン クラス (1.0.0.0 の場合は Version1000) のサンプルを次に示します。DbMigrator を使用した ExecuteMigrations メソッドを参照してください。また、DbMigrationsConfiguration から派生した VersionConfiguration クラスも使用しています。名前空間、ディレクトリ、ContextType を設定する場所にあります。等..
public class Version1000 : Version
{
public override string VersionNumber
{
get { return "1.0.0.0"; }
}
public static Version Version
{
get
{
return new Version1000();
}
}
public override void ExecuteMigrations()
{
var configuration = new VersionConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(MyCustomContext.CONTEXT_CONNECTION_STRING_NAME);
var migrator = new DbMigrator(configuration);
migrator.Update();
}
}
VersionConfiguration クラス
class VersionConfiguration : DbMigrationsConfiguration<MyCustomContext>
{
public VersionConfiguration()
{
AutomaticMigrationsEnabled = false;
MigrationsNamespace = "Some.Namespace._1000";
MigrationsDirectory = "Migration\\1000";
ContextType = typeof(MyCustomContext);
}
protected override void Seed(MyCustomContext context)
{
base.Seed(context);
}
}
アプリケーションのアプリケーション開始時に、データベースの現在のバージョンを確認し、現在のデータベースに適用されていないバージョンを適用します。これは、バージョン クラスの ExecuteMigrations メソッドを呼び出すことによって行われます。
DbMigrator.Update メソッドが呼び出されたときに変更がデータベースに反映されず、DbMigrationsConfiguration で設定されたフォルダー/名前空間内の移行クラスが実行されないという例外はありません。
アプリケーションの種類: ASP.NET MVC 4 .NET Framework: 4.5