2014-06-20 18 views
6

Załóżmy, że mam prostą aplikację WPF przy użyciu Entity Framework Code First, aby utworzyć bazę danych, połączyć się z nią i wyświetlić niektóre dane. Od początku nie chcę się martwić o ciągi połączeń więc po dodaniu odniesienia entityframework poprzez Nuget Wezmę automatycznie generowane app.config wygląda tak:Autogenerowany domyślny ciąg połączenia kontra ręcznie dodany

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

będę uruchomić test i obserwować ciąg połączenia:

var strings = ConfigurationManager.ConnectionStrings; 

z wynikiem:

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

jak lubię definiować własne parametry połączenia, dodam to do mojego app.config:

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

I tak gdy uruchamiam ponownie test i obserwować srings połączenia widzę, że istnieją dwa teraz:

[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} 

Dlaczego jest to, że widzę dwa ciąg połączenia? Jeśli pierwsza z nich jest domyślna, czy nie powinna być zapomniana, gdy ją utworzę?

Dzięki

Odpowiedz

7

Pierwszy ciąg połączenia, który widzisz pochodzi z machine.cofig z komputera. Posiada następujące części:

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

który definiuje domyślny ciąg połączenia do bazy danych ASP.NET. Jeśli naprawdę nie trzeba go do aplikacji, można edytować machine.config plik (nie zalecane) lub clear ciągów połączenia przed dodanie Twoja:

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

Należy także pamiętać - to jest ciąg połączenia nie używane przez Entity Framework. Domyślnie używa serwera i bazy danych SQLEXPRESS o nazwie równej pełnej nazwie klasy DbContext. Możesz to sprawdzić, wchodząc na stronę context.Database.Connection.ConnectionString.

0

Menedżer konfiguracja prostu chwyta wszystkie ciągi połączeń zdefiniowanych w app/web.config.

Nie można uogólnić założenia, że ​​po dodaniu ciągu połączenia nie będzie już potrzebne ustawienie domyślne. Ten drugi ciąg połączenia może wskazywać na zupełnie inną bazę danych.

Powiązane problemy