Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Visual Studio 2012 Code First still uses SQLEXPRESS by default

I created a brand new Web API project, created a simple Code First model (one class with an id and the dbcontext object, and that's it), and ran Enable-Migrations in the package manager console.

I noticed that it creates the database in SQLEXPRESS rather than LocalDB, despite the DefaultConnection string pointing to (LocalDB) in the Web.config file. This causes subsequent queries to fail, claiming that the database hasn't been initialized.

How do I get the Enable-Migrations command in VS 2012 to point to LocalDB rather than SQLExpress? I've tried installing SQL Management Studio 2012 Express and stopping the SQLEXPRESS database, but that just causes the Enable-Migration command to fail.

Any tips?

Note: I have VS 2010 installed, along with all the default software that it comes with (like SQL Server), so perhaps that's interfering.

like image 528
gzak Avatar asked Feb 17 '13 04:02

gzak


People also ask

Does Entity Framework create tables?

If you're using a Code First approach then Entity Framework will build the table for you. It looks like you are not using Code First, so you will have create the table in the database.


2 Answers

Looks like you have to actually specify (in the context constructor) that the DefaultConnection should be used by the context. For example:

public class QueensFinalDb : DbContext
{
    public QueensFinalDb()
        : base("name=DefaultConnection")
    {

    }
}

Otherwise I'm guessing it uses the first connection string in machine.config, which in my case is:

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
like image 89
Tom Hunter Avatar answered Sep 28 '22 11:09

Tom Hunter


All I could find was this:

If SQL Express is installed (included in Visual Studio 2010) then the database is created on your local SQL Express instance (.\SQLEXPRESS). If SQL Express is not installed then Code First will try and use LocalDb ((localdb)\v11.0) - LocalDb is included with Visual Studio 2012.

Note: SQL Express will always get precedence if it is installed, even if you are using Visual Studio 2012

Here.

like image 43
RobC Avatar answered Sep 28 '22 11:09

RobC