Synchronizing EF Code First to SQL Azure - entity-framework

I am trying to find the best way to synchronize/migrate EF Code First databases from localhost to SQL Azure without using EFCF Migrations. I know that I could use this approach, but I want to look at different, less automagic options.
The following process, or variations of such, is the one I'd like to follow:
Develop locally, letting EFCF build the databse on localhost
Synchronize the local database with the stage database on SQL Azure using some tool
Run tests in the staging environment
Synchronze/migrate the database (local or stage) to the production database on SQL Azure
Using MySQL, this is a breeze. The MySQL Workbench can synchronize a schema model to the database in question, plain and simple. In this case, I don't have a schema model per se, but the database on localhost generated by EFCF could be concidered the schema.
Which tools are available to perform this task? Is it possible to do this using SSMS?
Update: How I did it:
After the tip from Craig to use a Visual Studio 2012 Database Project, I did the following:
Created an empty VS 2012 database project and set its target platform to SQL Azure
Did a new schema compare, source database = local db and target = database project
Updated the target. This brought the database project up to speed
Did a new compare, source= database project and target = SQL Azure stage db
Updated the target. This brought the SQL Azure stage db up to speed
This was exactly what I was looking for

The Visual Studio 2012 database project can do it, I do it all the time.

It's not free, but Red-Gate's SQL Compare would handle the schema replication

Related

How to share a postgreSQL database?

I'm currently working on a project with some colleagues and a colleague of mine linked a database created in her postgreSQL server to our visual studio project, but we don't know how she can share the database with the rest of us, or how can we modify the database without having it.
We're using postgreSQL 14.
One option is to create your database in a cloud provider such as AWS.
You can take a look at: https://aws.amazon.com/rds/postgresql/
This way all of you will be able to access the database.

EF Core SQLite on Mac and Windows with Publish to Azure

I'm looking for an improved solution for cross platform EF Core local dev with stage/production publish to Azure Web/SQL.
Current Local Solution:
I have an ASP.NET Core, EF Core, Identity, MVC 6 app with local development on MacOS and Windows using SQLite. SQLite was chosen as I believe it's the only stable db provider for both Mac and Windows. Each time a change is made that requires a database migration we run a script that
1) Deletes the local SQLite database(s) and the existing migration and ContextModelSnapshot files
2) Creates an "initial" migration
3) Updates the database
4) The windows version of the script moves the SQLite databases to the wwwroot directory as we use IIS Express on Windows
Note: Migrations folder is ignored in .gitignore
For local dev the solution is working.
When I publish to Azure we:
1) Comment out the services.AddEntityFramework() .AddSQLite() connections and switch to the SQLServer connections
2) Run a script to create a fresh migration (as the migration generated for SQLite doesn't work on Azure SQL)
3) Run a script to delete the database tables on SQL Azure
4) Publish
5) Switch config back to SQLite and continue local dev
I'm hoping someone can suggest a better solution that eliminates most of the manual steps as well as handle the scenario when we have staging/production databases that we want to migrate instead of delete.
It seems like the only correct solution is environment specific methods in Startup.cs as described.
Basically you create ConfigureDevelopmentServices() method and add your environment specific configuration there.

Data migration - development to production - OrientDb

I'm using an orientdb server for developments. Work great. Has classes, about to add support for files, etc. I'm about to provision a server on Azure for orientdb for testing by external people.
Question is
What is the database migration plan as in how to move data between the test database and the development database? Currently, it is just data but soon files will be added. coming from EF background
you can simply make a copy of db folder from test instance to develop.
Alternatively you can do an export (in.gz format) from test and then import in develop

SQL Server Data Tools and Edmx

So we're using the new SSDT Microsoft released, pretty cool stuff. We are keeping a database project under version control with all the schemas, and an offline database for development and we can later deploy on SQL Azure database. We;re using EF in development, so my question is where would the edmx fit in, should we update the edmx file from the offline database or from the online SQL Azure directly, whats the best practice on this?
I would say that in your case "the production database is the truth", so I would update from SQL Azure. There's no right answer tho really.
Incidentally, in the early betas of SSDT it was possible to have a reference from an EDMX to a SSDT project thus your source code became the truth (which, in my opinion, is preferable) and the EDMX knew it was always working against "the truth". Unfortunately they ditched this feature and there are no signs of it returning.
For the EF to work correctly the EDMX file has to be in-synch with the database you are connecting to. It's hard to answer your question without knowing the development process you follow but I would imagine you use Sql Azure in production and develop against an on-premises database. Therefore one copy of the Edmx file will be used on production server. In the development environment you have a "living" copy of the edmx file that is changed as needed when the local database changes. When you get to the point you when you are ready to ship you deploy your app (include the edmx file) to a production environment that uses Sql Azure.
If, in your development environment, you update the edmx file from the SQL Azure then stuff will break or will not work correctly if the schema of the database in Azure is different from schema of your local database.

Which ways do I have to import my tables and data from SQL Server to SQL Azure?

I'm looking for the easiest way to import data from SQL Server to SQL Azure.
I'd like to work locally, would there be a way to synchronize my local database to SQL Azure all the time?
The thing is I wouldn't like to update each time I add a table in my local database to SQL Azure.
I HIGHLY recommend using the SQL Database Migration Wizard: http://sqlazuremw.codeplex.com/ it is the best free tool I've used so far. Simple and works much easier the the SSMS and VS built in tools. I think the Red-Gate tools now work well with SQL Azure too - but I haven't had a chance to use them.
Have you looked at SQL Data Sync? A new October update just came out today.
http://msdn.microsoft.com/en-us/library/hh456371
Microsoft SQL Server Data Tools (SSDT) was developed by Microsoft to make it easy to deploy your DB to Azure.
Here's a detailed explanation: http://msdn.microsoft.com/en-us/library/windowsazure/jj156163.aspx or http://blogs.msdn.com/b/ssdt/archive/2012/04/19/migrating-a-database-to-sql-azure-using-ssdt.aspx
and here's how to automate the process of publishing: http://www.anujchaudhary.com/2012/08/sqlpackageexe-automating-ssdt-deployment.html
To look: SQL Server Data Tools Team Blog
There are a few ways to migrate databases, I would recommend you to do it by using the generate scripts Wizard.
Here are the steps to follow
http://msdn.microsoft.com/en-us/library/windowsazure/ee621790.aspx
Also there are others tools like Microsoft Sync Framework.
Here you'll find more information about it
http://msdn.microsoft.com/en-us/library/windowsazure/ee730904.aspx