2012-04-12 7 views
2

Ich habe Code-First-Entity-Framework verwendet. Ich habe in der Datei web.config eine Verbindung definiert, deren Name mit dem Klassennamen meines DbContext übereinstimmt (in diesem Beispiel 'MyDbContext').Code-first Entity Framework, das bei der Initialisierung keine Verbindungszeichenfolge web.config abruft

EF verwendet diese Verbindung ohne Probleme, wenn die Datenbank vorhanden ist.

Wenn ich jedoch die Datenbank lösche (um EF zu zwingen, sie neu zu erstellen), erstellt EF stattdessen die Datenbank auf dem lokalen Sql Express-Server.

Wenn ich die volle Verbindungszeichenfolge in der DbContext Klassenkonstruktors angeben wie

public class ReykerSCPContext : DbContext 
{ 
public ReykerSCPContext() : 
    base("Server=tcp:MyDBSErver.database.windows.net,1433;Database=MyDB;User ID=#######;Password=#######;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;PersistSecurityInfo=True;") { } 
} 

dann die Datenbank auf dem Server korrekt der Wahl erstellt wird. Groß!

Kann mir jemand sagen, ob dies das richtige Verhalten ist, da ich mir den Kopf zerschlage. Ich möchte es aus der web.config zu arbeiten, also brauche ich nicht unbedingt wieder aufbauen und erinnern Einstellungen in den Code zu ändern, etc ..

+0

Ich glaube, das ist normal und EF standardmäßig auf die lokale SQL-Instanz. Ich muss eines meiner Projekte testen, um es zu überprüfen. Sie können auf Julie Lerman googlen und ihre Blogs/Videos sehen, wie sich der EF-Code zuerst verhält und wie er geändert wird. – Brian

+0

Ich kann dieses Verhalten nicht reproduzieren. Ob die Datenbank vorhanden ist oder nicht, die connectionString von der Konfiguration wird verwendet. Haben Sie (als Workaround) versucht, den Namen der Verbindungszeichenfolge an den DbContext ctor zu übergeben (zB base ("name = {Your connection string}")? Falls nicht, versuchen Sie, ob es funktioniert. Auch welche Version von EF sind Sie? – Pawel

+0

Ihre Konstruktor MyDbContext hat einen anderen Namen als Ihr Klassenname ReykerSCPContext, ist das das Problem? – Sergey

Antwort

3

Dies sollte es tun:

public class EFDbContext : DbContext { 
    public EFDbContext() : base("EFDbContext") { 

    } 

    public DbSet<Product> Products { get; set; } 
} 

Sie sollten haben Sie die Verbindungszeichenfolge durch den Namen Ihrer Kontextklasse in der web.config und das wird es tun. Die web.config sollte sich im root befinden.

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source = .; Initial Catalog = ITSDB; Integrated Security = true" providerName="System.Data.SqlClient"/> 
</connectionStrings> 
0

Wenn Sie

update-database -v 

tun, und es zeigt es IIS Express-Instanz anstelle des Wertes aus der Web.Config verwendet, bedeutet das EF verwirrt ist, wenn die lokale IIS Express-Instanz ausgeführt wird.

Ich hatte das gleiche Problem und wurde durch stop/delete IIS Express gelöst.

"sqllocaldb.exe stop v11.0" 

"sqllocaldb.exe delete v11.0” 

Hopfen, das hilft jemandem!