2014-09-03 8 views
11

anhängig erzeugen, ich bin mit EF 6.1 und ich fähigen Code erste Migration in meinem Projekt vonkann nicht eine explizite Migration, da die folgenden expliziten Migrationen

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 

Wenn ich meine angeben ConnectionString, ConnectionProviderName explizit mit Add-Migration und Update-database in Paket-Manager-Konsole es korrekt funktionieren:

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" 

aber wenn ich Add-Migration verwenden, ohne zusätzliche informieren ations:

add-migration updateXtable 

ich folgende Fehlermeldung erhalten:

Unable to generate an explicit migration because the following explicit migrations are pending: [201408300955376_InitializeDb, 201408311028404_Test]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

So folgenden Befehl ein, ich jedes Mal, wenn ich meine Datenbank aktualisieren müssen verwenden:

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 

Es ist mein Projekt (das enthält mein DbContext) app.config Datei:

<?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> 

Weiß jemand wo ist das Problem?

+0

Könnten Sie einen detaillierteren Befehl angeben, den Sie nacheinander ausgeführt haben?etwas wie, Bearbeiten Sie das Modell -> 'Enable-Migrations' ->' Add-Migration updateXtable -ConnectionProviderName ..' -> 'Update-Database-ConnectionProviderName ..' -> Modell erneut bearbeiten ->' Add-Migration'? –

+0

@YuliamChandra: Ich habe die Frage aktualisiert. – Masoud

+2

Stellen Sie sicher, dass das Standardprojekt in PackageManagerConsole und das Startprojekt in der Projektmappe das Projekt ist, das 'DbContext' enthält –

Antwort

3

Endlich fand ich das Problem! Wie Mohamad Bataineh sagte in this thread (die Antworten sehen)

In your DbContext class, you have need to specify the base class constructer with the proper name to your sql source. For example name=MyDBEntities

Im anderen Wort, das ich meine vorhandenen DbContext Konstruktor

geändert
public MyDbContext() 
{ 
} 

Um

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

Um dieses Problem zu beheben, habe ich mein Standardprojekt zu dem mit der app.config, die die richtige Verbindungszeichenfolge enthält, geändert.

Dies sollte offensichtlich gewesen sein, da das System keine der Migrationen als angewendet erkannt hat - ein offensichtliches Zeichen dafür, dass es die Datenbank nicht gefunden hat wie OP geschlossen).

"Rückblick ist 20/20".

+1

Mein Startprojekt enthält die richtige Verbindungszeichenfolge, aber ich habe Problem erwähnt. – Masoud

+0

Ich arbeite in einem Azure Cloud Service-Projekt, sodass das Azure-Projekt als Startprojekt festgelegt werden muss. Nach Ihrer Empfehlung habe ich die Verbindungszeichenfolge zu der Datei app.config im Datenprojekt hinzugefügt, sodass EF auf die Verbindungszeichenfolge zugreifen kann. Alternativ kann -StartUpProjectName "Web" in dem Befehl angegeben werden, in dem Web das Projekt mit der Verbindungszeichenfolge –

+0

@JohnMc ist, das nicht mein Vorschlag ist. Mein Vorschlag ist, Ihr Projekt mit der Verbindungszeichenfolge als Startprojekt festzulegen, führen Sie Ihre Befehle in der NuGet Packet Manager-Konsole aus, und legen Sie dann das Startprojekt auf jedes Projekt fest, das ausgeführt werden soll. – ANeves

3

Ich bekam auch diesen Fehler. Zusätzlich zum korrekten Festlegen des Standardprojekts (wie von ANeves erwähnt) musste ich auch das Projekt mit der Verbindungszeichenfolge als Startprojekt im Projektmappen-Explorer festlegen. Nur wenn ich beide richtig gesetzt habe, ist der Fehler verschwunden.

+0

Wenn ich das 1000000 Mal verbessern könnte, würde ich es tun. Habe gerade 45 Minuten verloren .... Alles was ich tun musste war das Startup Projekt: / –

1

ich in der Lage war, um loszuwerden, die Nachricht durch Löschen der entsprechenden Migration in meinem Migrations-Ordner (im Solutions Explorer), dann fügen Sie die neue Migration und schließlich updat hinzu der Datenbank.

1

Löschen Sie einfach diese Migration aus dem Migrationsordner, die einen Fehler anzeigt und die Datenbank nicht aktualisiert. Fügen Sie dann erneut die Migration hinzu. Es wird klappen.

Verwandte Themen