Synchronise your database with your Entity Framework (EF) C# DBContext class files.
Obviously EF has migrations to keep your 'code-first' or 'database-first' projects up to date. But what if you start with the database, then want to make changes in the code and sometimes tweak the database again; and want to keep the classes and physical databases in sync.
DBContextSync clearly shows you the differences between your classes and database, allows you to select what you want to do.
See the example video below (note, some command line arguments are hard coded for privacy)
Clone the code, and from within the project folder (./DbContextSync) run:
dotnet run -d <db_connection_string> -c <context_class_path>Before actually copying tables and fields, you will be prompted various questions. Answers to all the questions can be pre-set via arguments to allow running without interruption.
-d or --database The database connection string.
-c or --context Glob file path pattern to the DbContext class and the table class files. (e.g. ./Library/DAL/**/*.cs)
--count Add this argument to return only the count of changes.
--preview Add this argument to return only the change preview.
--contextclass=<class_name> If the --context class path provided contains multiple DbContext classes you will be asked which to use. Provide this argument with the name of the class (<class_name>) to skip the question.
--databasetype=MySql The database type should be derived from the connection string, but can be set here if required. Currently only supports MySql.
--direction=[ToDbContext | ToDatabase | ToDatabaseWithDeletes] Sets the copy direction without being asked.
--noconfirm Start the copy process with confirming.
--noconfirmdelete If the direction is ToDatabaseWithDeletes (and the copy would result in deletes from the database), you will be asked to double check you know what's happening. Set this to skip over the question.
--script If direction is ToDatabase or ToDatabaseWithDeletes, include this argument to output the sql scripts to the console.
--scriptfile=<file_path> If the script argument is provided, sql scripts will be output to the console. Supply a file_path to save the scripts to the path.
Currently only MySql is supported.
PR's welcome for other types; hopefully adding additional database types will be straight forward.
