无法生成显式迁移,因为以下显式迁移处于挂起状态

时间:2014-09-03 07:32:24

标签: c# entity-framework ef-migrations

我正在使用EF 6.1,我通过

启用了项目中的代码首次迁移
Enable-Migrations
Add-Migration InitializeDb -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
Update-Database  -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" -verbose -script

当我在包管理器控制台中明确指定ConnectionStringConnectionProviderName Add-MigrationUpdate-database时 它工作正常:

Add-migration updateXtable -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"

但是当我使用Add-Migration时没有额外的信息:

add-migration updateXtable

我收到以下错误:

  

由于以下显式迁移未决,因此无法生成显式迁移:[201408300955376_InitializeDb,201408311028404_Test]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

所以,每次我需要更新我的数据库时,我都必须使用以下命令:

Add-Migration UpdateXTable -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
Update-Database  -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" -verbose -script

这是我的项目(包含我的DbContextapp.config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
 <entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory,  EntityFramework" />
 <providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
 </providers>
 </entityFramework>
 <connectionStrings>
 <add name="ERPContext" connectionString="Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" providerName="System.Data.SqlClient" />
 </connectionStrings>

 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
 </startup>   
</configuration>

有谁知道问题出在哪里?

7 个答案:

答案 0 :(得分:22)

要解决此问题,我将默认项目更改为app.config包含正确连接字符串的项目。

这应该是显而易见的,因为系统正在检测已应用的迁移的 none - 这是一个明显的迹象表明它没有找到数据库,这显然是因为它无法找到连接字符串(如OP总结)。

&#34;后见之明是20/20&#34;。

答案 1 :(得分:3)

我也遇到了这个错误。除了正确设置默认项目(如ANeves所述)之外,我还必须使用连接字符串将项目设置为解决方案资源管理器中的StartUp项目。只有在我正确设置了这两个错误后,错误才会消失。

答案 2 :(得分:3)

最后我发现了问题! 正如Mohamad Batainehthis thread所述(见答案)

  

在DbContext类中,您需要使用sql源的正确名称指定基类构造函数。例如name = MyDBEntities

换句话说,我改变了现有的dbcontext构造函数

public MyDbContext()
{
} 

public MyDbContext(): base("name=ERPContext")
{
} 

答案 3 :(得分:1)

我能够通过删除迁移文件夹中的相应迁移(在解决方案资源管理器中)来删除该消息,然后添加新迁移并最终更新数据库。

答案 4 :(得分:1)

只需从迁移文件夹中删除该迁移,该文件夹显示错误且未更新数据库。然后再添加迁移。它会起作用。

答案 5 :(得分:0)

在我的情况下,工作站的IP地址未添加到SQL Server的防火墙例外中。

答案 6 :(得分:-1)

只需删除您有错误的迁移 它对我有用