Updated code to use protected abstract methods instead of throwing NotImplementedException from the explicit implementation of three IMigrationMetadata properties in the Migration class.