How to create database using code first migrations?

59k Views Asked by At

I'm having ASP.NET MVC 3 project that uses Entity Framwork 4.3 and its migrations. Now I want Entity Framework to create a database for me using migrations that I have already. When I trying to run Update-Database script it gives me the following:

Update-Database -Verbose -ProjectName AssemblyWithMigrations -StartUpProjectName WebProjectAssembly No migrations configuration type was found in the assembly '/* my name of assembly */'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

But, when I'm trying to run Enable-Migrations I see following:

Migrations have already been enabled in project 'AssemblyWithMigrations '. To overwrite the existing migrations configuration, use the -Force parameter.

So, the problem is EF trying to resolve current migration version to update database, I suppose. But database doesn't exist and it obviously fails.

The question is: how to use EF migrations for creating database if it doesn't exist? Or, what is the right way to do that using Nuget console?

In summary, what I want: 1. run command (perhaps update-database) that will create database using my web.config file 2. all migrations will be applied on the created database in their creation order.

Thanks. :)

3

There are 3 best solutions below

7
On BEST ANSWER

I realise this is an old question, but what the hell....

To enable migrations to create the initial database I've found the following works well.

  1. Delete your database from within SQL Server Object Explorer
  2. Delete all your existing migrations from within the Migrations folder.
  3. In Package-Management-Console type "Add-Migration InitialCreate"

    [optional, depending on your database initializer]

  4. In Package-Management-Console type "update-database"

This will give you a single migration script which will take you from "no database" to having a database that matches your current model.

0
On

Using Migrations is very useful but at times I have found it's better to use the following statements when working with databases.

Database initialization strategies: use any of the commented statements relevant to you.

public DataContext(): base("DefaultConnection") 
{
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfModelChanges<DataContext>());
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfNotExists<DataContext>());                                                            
  // Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>());
}                                                                                                                                                                                                                                                   
0
On

To create a database using code-first migrations in Entity Framework using the Package Manager Console, you can follow these steps:

1- Open Visual Studio and open the project in which you have defined your DbContext and entity classes.

2- Open the Package Manager Console by going to View -> Other Windows -> Package Manager Console.

3- Enable Migrations with a Specific DbContext:

Enable-Migrations -Context YourDbContextName

4- Add Initial Migration for a Specific DbContext:

Add-Migration InitialCreate -Context YourDbContextName

5- Update Database for a Specific DbContext:

Update-Database -Context YourDbContextName