[英]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.