Visual Studio 2012 Code First默认情况下仍使用SQLEXPRESS

时间:2013-02-17 04:01:30

标签: visual-studio-2012 entity-framework-5 sql-server-express localdb

我创建了一个全新的Web API项目,创建了一个简单的Code First模型(一个带有id和dbcontext对象的类,就是这样),并在包管理器控制台中运行Enable-Migrations。

我注意到它在SQLEXPRESS而不是LocalDB中创建了数据库,尽管DefaultConnection字符串指向Web.config文件中的(LocalDB)。这会导致后续查询失败,声称数据库尚未初始化。

如何让VS 2012中的Enable-Migrations命令指向LocalDB而不是SQLExpress?我已经尝试安装SQL Management Studio 2012 Express并停止SQLEXPRESS数据库,但这只会导致Enable-Migration命令失败。

任何提示?

注意:我安装了VS 2010,以及它附带的所有默认软件(如SQL Server),所以这可能是干扰。

2 个答案:

答案 0 :(得分:8)

看起来你必须实际指定(在上下文构造函数中)上下文应该使用DefaultConnection。例如:

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

    }
}

否则我猜测它使用的是machine.config中的第一个连接字符串,在我的例子中是:

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

答案 1 :(得分:3)

我能找到的就是:

  

如果安装了SQL Express(包含在Visual Studio 2010中),则会在本地SQL Express实例(。\ SQLEXPRESS)上创建数据库。如果未安装SQL Express,则Code First将尝试使用LocalDb((localdb)\ v11.0) - Visual Studio 2012中包含LocalDb。

     

注意:即使您使用的是Visual Studio 2012

,如果安装了SQL Express,它也将始终优先

Here