2014-06-20 6 views
6

Angenommen, ich habe eine einfache WPF-Anwendung mit Entity Framework Code Zuerst, um eine Datenbank zu erstellen, eine Verbindung herzustellen und einige Daten anzuzeigen. Von Anfang möchte ich nicht über Verbindungszeichenfolgen kümmern, so nach EntityFramework Referenz über Nuget Hinzufügen ich automatisch generiert bekommen app.config wie folgt aussehen:Automatisch generierte Standardverbindungszeichenfolge vs. manuell hinzugefügt

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <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> 
</configuration> 

I Test durchgeführt werden und Verbindungszeichenfolge zu beachten:

var strings = ConfigurationManager.ConnectionStrings; 

mit Ergebnis:

[0] = {data source=.\SQLEXPRESS;Integrated Security=SSPI;attachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true} 

Als ich meine eigene Verbindungszeichenfolge mag definieren, werde ich dies in meinem app.config hinzufügen:

<connectionStrings> 
    <add name="MyContext" connectionString="data ource=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\myDb.mdf;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Und so, wenn ich den Test erneut und beachten Sie die Verbindung Srings laufen kann ich sehen, dass es zwei jetzt:

[0] = {data source=.\SQLEXPRESS;Integrated Security=SSPI;attachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true} 
[1] = {data source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\myDb.mdf;Integrated Security=True} 

Warum ist es, dass ich zwei Verbindungszeichenfolge sehen kann? Wenn der erste Standard ist, sollte es nicht vergessen werden, sobald ich einen erstellt habe?

Dank

Antwort

7

Die erste Verbindungszeichenfolge, die Sie sehen, kommt von machine.cofig von Ihrem PC. Es hat folgenden Abschnitt:

<connectionStrings> 
    <add name="LocalSqlServer" 
      connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
      providerName="System.Data.SqlClient"/> 
</connectionStrings> 

Die definiert Standardverbindungszeichenfolge für ASP.NET-Datenbank. Wenn Sie wirklich für Ihre Anwendung benötigen es nicht, können Sie entweder machine.config Datei (nicht empfohlen) oder clear Verbindungszeichenfolgen vor dem Hinzufügen von Ihnen bearbeiten:

<connectionStrings> 
    <clear /> 
    <add name="MyContext" 
     connectionString="data ource=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\myDb.mdf;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Auch im Auge behalten - diese Verbindungszeichenfolge ist nicht von Entity Framework verwendet. Standardmäßig verwendet es den SQLEXPRESS-Server und die Datenbank mit dem Namen, der dem vollständigen Namen Ihrer DbContext-Klasse entspricht. Sie können es überprüfen, indem Sie auf context.Database.Connection.ConnectionString zugreifen.

0

Der Konfigurationsmanager greift nur alle Verbindungszeichenfolgen in der app/web.config definiert.

Es kann nicht die generelle Annahme gemacht werden, dass sobald Sie eine Verbindungszeichenfolge hinzufügen, Sie keine Standardumgebung mehr wünschen. Diese zweite Verbindungszeichenfolge könnte auf eine völlig andere Datenbank verweisen.