私は最近、EF6 でこの問題に遭遇しました (まだ修正されていないため)。Migration クラスを手動で変更せずに行う最も簡単な方法は、Configuration クラスで CodeGenerator をオーバーライドすることです。
MigrationCodeGenerator を実装するクラスを作成し、Generate メソッドをオーバーライドすることで、すべての操作を繰り返し、必要な変更を適用できます。
変更が完了したら、CSharpMigrationCodeGenerator を初期化し、デフォルト値を返すことができます。
public class ExtendedMigrationCodeGenerator : MigrationCodeGenerator
{
public override ScaffoldedMigration Generate(string migrationId, IEnumerable<MigrationOperation> operations, string sourceModel, string targetModel, string @namespace, string className)
{
foreach (MigrationOperation operation in operations)
{
if (operation is CreateTableOperation)
{
foreach (var column in ((CreateTableOperation)operation).Columns)
if (column.ClrType == typeof(DateTime) && column.IsNullable.HasValue && !column.IsNullable.Value && string.IsNullOrEmpty(column.DefaultValueSql))
column.DefaultValueSql = "GETDATE()";
}
else if (operation is AddColumnOperation)
{
ColumnModel column = ((AddColumnOperation)operation).Column;
if (column.ClrType == typeof(DateTime) && column.IsNullable.HasValue && !column.IsNullable.Value && string.IsNullOrEmpty(column.DefaultValueSql))
column.DefaultValueSql = "GETDATE()";
}
}
CSharpMigrationCodeGenerator generator = new CSharpMigrationCodeGenerator();
return generator.Generate(migrationId, operations, sourceModel, targetModel, @namespace, className);
}
}
internal sealed class Configuration : DbMigrationsConfiguration<Project.Models.Context.DatabaseContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations";
this.CodeGenerator = new ExtendedMigrationCodeGenerator();
}
}
これが役立つことを願っています