2017-05-08 82 views
1

我正在使用实体框架以及代码优先迁移更新我的数据库的项目。我在另一台机器上开始了这个项目,结果非常好。现在我检查了另一台机器上的代码。由于这台机器没有数据库,我在nuget中运行了update-database命令。它应该应用我以前的迁移并在此机器上创建一个新的数据库,但它显示以下错误。实体框架:无法更改代码优先迁移的数据源

error

我读this MSDN文章它说

如果本地SQL Express实例是可用的,那么代码首先创建了数据库,该实例 如果(默认情况下在Visual Studio 2010中安装) SQL Express不可用,则Code First将尝试使用LocalDb(默认情况下安装Visual Studio 2012)

rstand是因为当我在第一台机器上启用了迁移时,它创建了SQLEXPRESS实例作为DataSource的数据库,并且由于我目前的机器中没有该数据库,因此无法创建数据库。所以我试图将EntityFramework的DataSource更改为我当前使用的LAPTOP-HD618J49的sql server的实例。为此,我尝试在app.config中编写一个带有此实例的硬编码连接字符串,在Data Context类中更改了ContextName,但无济于事。请给我一些关于我可能错过的指示?

+0

我建议你在你的上下文的构造函数中指定一个连接字符串名,如[这里]所述(http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx) 。然后将该连接字符串添加到您的配置文件。应该不需要更改上下文的名称。 –

+0

@SteveGreene我也尝试过。还是一样的错误。 –

+0

首先要做的是使用VS(或SQL Management Studio)中的SQL Server对象浏览器连接到所需的数据库并确保您有权访问(默认情况下,您无权访问远程数据库)。其次,你的错误信息是否仍然指'。\ SQLEXPRESS'?这表明它没有使用LAPTOP-HD618J49的连接字符串。 –

回答

0

我终于解决了这个问题。早些时候,我尝试使用base("name=ConnectionStringNameHere"),但在包管理器控制台中运行update-database命令时,它不起作用。奇怪的原因是Visual Studio不知道哪个app.config检查ConnectionStringName。尽管我已经在包管理器控制台的下拉列表中选择了具有实体框架的模块。我必须从解决方案资源管理器窗口中选择具有实体框架的模块并将其设置为启动项目。这不知何故解决了这个问题,它能够从更新的数据源的模块的app.config中选择ConnectionStringName。