可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am adding a new migration but this message shows:
Unable to generate an explicit migration because the following
explicit migrations are pending: [201203170856167_left]. Apply the
pending explicit migrations before attempting to generate a new
explicit migration.
Can any one help me?
回答1:
It tells you that there is some unprocessed migration in your application and it requires running Update-Database
before you can add another migration.
回答2:
I had the same problem. Apparently entity framework generates this error when it's unable to connect to the database. So make sure that you're able to access it before searching for other problems.
回答3:
You either need to run "update-database" from the package manager console to push your changes to the database OR you can delete the pending migration file ([201203170856167_left]) from your Migrations folder and then re-run "add-migration" to create a brand new migration based off of your edits.
回答4:
This error can also mean that the migrations are not recognized anymore. This happened to me after having changed the value of the ContextKey in Migrations.Configuration.
The solution was simply to update the ContextKey in the database table "__MigrationHistory" (or revert the value in the Configuration class I guess). The ContextKey and the Namespace in your application should match.
回答5:
1. Connection String / Connection Permissions
Check the connection string again.
Make sure the user you are connecting with still has permission to read from [__MigrationHistory]
and has permission to edit the schema.
You can also try changing the connection string in the App or Web config file to use Integrated Security (Windows Auth) to run the add-migration command as yourself.
For example:
connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;"
This connection string would go in the App.config file of the project where the DbContext is located.
2. StartUp Project
You can specify the StartUp project on the command line or you can right click the project with the DbContext
, Configuration
and Migrations folder and select Set as StartUp project. I'm serious, this can actually help.
回答6:
Had the same issue and was able to solve with some hints from above answers:
- In package manager console check the default project (point to the project with the migration configuration
- Ensure the startup-proj has a web.config with a valid connectionstring (
or
- Ensure the project with migrations has an app.config / web.config with a valid connectionstring
- Check permissions in DB (for the user configured in you connectionstring)
Use "update-database -verbose" in the package manager console to get more specific information where migrations tries to connect to. (Helped in my case to find out my startup proj was not set correctly...)
回答7:
If you haven't used Update-Database
you can just delete it. If you've run the update then roll it back using Update-Database -TargetMigration "NameOfPreviousMigration"
, then delete it.
Reference:
http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
I copied this text directly from here: How do I undo the last Add-Migration command?
回答8:
When running into this issue, please try adding parameters to your add-migration cmdlet. For example, specifying the start up project as well as the connection string name could help EF find your target database.
add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL
Where:
Delta_Defect_0973 is the name of your migration
your.namespace.ContextClassName is the name of your Configuration class in your migration folder, prefixed with the full name space.
DeltaProject is the name of your main project with your web.config or app.config file.
DeltaSQL is the name of your connection string defined in your web.config or app.config file.
回答9:
This error means there are pending migrations need to be commited before you can execute another explicit migration. You can choose to
- Execute those pending migrations using Update-Database command
- Delete those pending migrations. Safest way is open Migrations folder, right click on [201203170856167_left] > Exclude from project
After this one you can start "Add-Migration ..." again
Hope it helps
回答10:
Just my two cents:
My scenario:
- I restored my local database to a working state.
- Already had migrations already applied to it.
- Whenever I tried adding a new migration i got the error about pending migrations as mentioned my the OP.
Solution:
To get around this i just provided more explicit parameters:
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
I am lead to believe that you can set a setting in your app.config folder to allow you to default this behaviour so you don't have to provide explicit parameters everytime. However I am not sure on how to do this.
回答11:
There is an ambiguity and so error. Best way is to exclude the current migration file and create new migration(add-migration) file and then copy the content of new migration to excluded file and include it again and run update-database command.
回答12:
I had the same problems and was only able to resolve it running Add-Migration 'MigrationName' -Force
With -Force being the important part.
回答13:
My local database did not have the __MigrationHistory
populated, or existing. I manually created the table, and then migrated the data in that table from PROD to my local database. This caused VS to think the migrations had been applied (which they had been).
回答14:
Scenario
- I am working in a branch in which I created a new DB migration.
- I am ready to update from master, but master has a recent DB migration, too.
- I delete my branch's db migration to prevent conflicts.
- I "update from master".
Problem
After updating from master, I run "Add-Migration my_migration_name", but get the following error:
Unable to generate an explicit migration because the following
explicit migrations are pending:
[201607181944091_AddExternalEmailActivity]. Apply the pending explicit
migrations before attempting to generate a new explicit migration.
So, I run "Update-Database" and get the following error:
Unable to update database to match the current model because there are
pending changes and automatic migration is disabled
Solution
At this point re-running "Add-Migration my_migration_name" solved my problem. My theory is that running "Update-Database" got everything in the state it needed to be in order for "Add-Migration" to work.
回答15:
I also came across this issue. It came when I created new DB and I had pending changes for my code-first DB migration then I tried to run "Update-Database" command. Solution : Run "Add-Migration -MigrationName" command to create new migration for new DB. Then run "Update-Database" command.
回答16:
I had this problem too for a database that I knew was up to date when running Add-Migration. Solved by simply running the Add-Migration command a second time. Suspect a connectivity issue, as suggested by Robin Dorbell above.
回答17:
That was happened when i suddenly renamed class of old migration that already exist in db. I checked VCS history, determined that and renamed back. All worked afterwards.
回答18:
Tip: It's always good to use the -Script
switch for migration commands if you're not sure. It also really helps understand what Update-Database
actually does.
I run the following to update the database, then I get a script I can apply manually (or just run it again without the -Script tag).
For Update-Database
I would run the following :
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
Where SQL_AzureLive
is the named connection string in my config.
Then I can verify the SQL looks right, apply it and be done. As many others have said if the connection string is wrong or invalid you'll get this error.
回答19:
I did another way.
I droped database entirely and run "update-database" again in vs.
回答20:
I suffered exactly the same problem just after reverting from a migration to another.
In my case I "targetedmigration" from "migration06" to "migration04".
I needed to delete the "migration0"6 and then I was able to force creating the "migration05". This basically means that you need to just keep the next migration after the targeted one.