Challenge:
For applications working with databases, there exists a problem of versioning, verifying and modifying DB schemas. In terms of this project it was necessary to design a flexible mechanism allowing to execute all the above functions. This mechanism is of a special importance for extensible .Net applications, i.e. for those ones meant to be extended with new functionality. Supposing that a new version of a system or a module with additional functionality is produced. This results in the DB schema modification. How should these modifications be delivered to the Customer who uses this system? How should the required DB schema modification be made so that it would not corrupt the Customer's information? How is it possible to verify whether the Customer has not violated the existing database structure?