[英]Unable to generate an explicit migration because the following explicit migrations are pending
我正在使用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
当我在包管理器控制台中使用Add-Migration
和Update-database
明确指定我的ConnectionString
、 ConnectionProviderName
,它可以正常工作:
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
这是我的项目(包含我的DbContext
) app.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>
有谁知道问题出在哪里?
为了解决这个问题,我将我的默认项目更改为app.config
包含正确连接字符串的项目。
这应该是显而易见的,因为系统没有检测到任何已应用的迁移 - 一个明显的迹象表明它没有找到数据库,一个明显的原因是它找不到连接字符串(如 OP 得出的结论)。
“事后诸葛亮是 20/20”。
我也收到了这个错误。 除了正确设置默认项目(如 ANeves 所述)之外,我还必须将带有连接字符串的项目设置为解决方案资源管理器中的启动项目。 只有在我正确设置了这两个之后,错误才会消失。
终于我发现了问题! 正如Mohamad Bataineh在这个帖子中所说的(见答案)
在您的 DbContext 类中,您需要为您的 sql 源指定具有正确名称的基类构造函数。 例如 name=MyDBEntities
换句话说,我改变了我现有的 dbcontext 的构造函数
public MyDbContext()
{
}
到
public MyDbContext(): base("name=ERPContext")
{
}
通过删除我的 Migrations 文件夹(在解决方案资源管理器中)中的相应迁移,然后添加新迁移并最终更新数据库,我能够摆脱该消息。
只需从显示错误而不更新数据库的迁移文件夹中删除该迁移。 然后再次添加迁移。 它会起作用。
在我的情况下,我的工作站的IP地址没有添加到SQL Server的防火墙例外。
只需删除您有错误的迁移,它对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.