Sdílet prostřednictvím


Nastavení konfiguračního souboru

Entity Framework umožňuje zadat řadu nastavení z konfiguračního souboru. Obecně platí, že EF se řídí principem konvence nad konfigurací: všechna nastavení probíraná v tomto příspěvku mají výchozí chování, stačí se starat jenom o změnu nastavení, když výchozí nastavení přestane splňovat vaše požadavky.

Pokyny ke konfiguračním datům

  • Nikdy neukládejte hesla ani jiné citlivé údaje v kódu zprostředkovatele konfigurace nebo v textových konfiguračních souborech.
  • Nepoužívejte produkční tajné kódy ve vývojových nebo testovacích prostředích.
  • Tajné kódy zadávejte mimo projekt, aby nemohly být omylem potvrzeny do úložiště zdrojového kódu.
  • Zvažte ochranu obsahu konfiguračního souboru pomocí chráněné konfigurace.

Upozorňující

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčníchaplikacích

Alternativní řešení založené na kódu

Všechna tato nastavení se dají použít také pomocí kódu. Od EF6 jsme zavedli konfiguraci založenou na kódu, která poskytuje centrální způsob použití konfigurace z kódu. Před ef6 je možné konfiguraci dál používat z kódu, ale k konfiguraci různých oblastí je potřeba použít různá rozhraní API. Možnost konfiguračního souboru umožňuje snadné změny těchto nastavení během nasazování bez aktualizace kódu.

Oddíl Konfigurace entity Frameworku

Od EF4.1 můžete nastavit inicializátor databáze pro kontext pomocí části appSettings konfiguračního souboru. V EF 4.3 jsme zavedli vlastní část entityFramework pro zpracování nových nastavení. Entity Framework bude stále rozpoznávat inicializátory databáze nastavené ve starém formátu, ale pokud je to možné, doporučujeme přejít do nového formátu.

Oddíl entityFramework se automaticky přidal do konfiguračního souboru projektu při instalaci balíčku NuGet EntityFramework.

<?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=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
</configuration>

Připojovací řetězce

Tato stránka obsahuje další podrobnosti o tom, jak Entity Framework určuje databázi, která se má použít, včetně připojovací řetězec v konfiguračním souboru.

Připojovací řetězce jsou součástí standardního elementu connectionStrings a nevyžadují oddíl entityFramework .

Modely založené na kódu First používají normální ADO.NET připojovací řetězec. Příklad:

<connectionStrings>
  <add name="BlogContext"  
        providerName="System.Data.SqlClient"  
        connectionString="Server=.\SQLEXPRESS;Database=Blogging;Integrated Security=True;"/>
</connectionStrings>

Modely založené na EF Designeru používají speciální připojovací řetězec EF. Příklad:

<connectionStrings>
  <add name="BlogContext"  
    connectionString=
      "metadata=
        res://*/BloggingModel.csdl|
        res://*/BloggingModel.ssdl|
        res://*/BloggingModel.msl;
      provider=System.Data.SqlClient;
      provider connection string=
        &quot;data source=(localdb)\mssqllocaldb;
        initial catalog=Blogging;
        integrated security=True;
        multipleactiveresultsets=True;&quot;"
     providerName="System.Data.EntityClient" />
</connectionStrings>

Typ konfigurace založené na kódu (EF6 a vyšší)

Počínaje ef6 můžete zadat DbConfiguration pro EF, která se má použít pro konfiguraci založenou na kódu ve vaší aplikaci. Ve většině případů nemusíte toto nastavení zadávat, protože ef automaticky zjistí vaši konfiguraci dbConfiguration. Podrobnosti o tom, kdy může být nutné zadat DbConfiguration v konfiguračním souboru, naleznete v části Moving DbConfiguration konfigurace založené na kódu.

Chcete-li nastavit typ DbConfiguration, zadejte název kvalifikovaného typu sestavení v elementu codeConfigurationType .

Poznámka:

Kvalifikovaný název sestavení je kvalifikovaný název oboru názvů následovaný čárkou a sestavením, ve kterém se typ nachází. Volitelně můžete také zadat verzi sestavení, jazykovou verzi a token veřejného klíče.

<entityFramework codeConfigurationType="MyNamespace.MyConfiguration, MyAssembly">
</entityFramework>

Zprostředkovatelé databází EF (EF6 a novější)

Před EF6 musely být části zprostředkovatele databáze specifické pro Entity Framework zahrnuté jako součást základního poskytovatele ADO.NET. Od EF6 se teď spravují a zaregistrují samostatně konkrétní části EF.

Za normálních okolností nebudete muset zaregistrovat poskytovatele sami. Tento postup obvykle provádí poskytovatel při instalaci.

Zprostředkovatelé jsou registrováni zahrnutím elementu zprostředkovatele v podřízené části zprostředkovatele entityFramework oddílu. Pro položku zprostředkovatele existují dva požadované atributy:

  • invariantName identifikuje základního poskytovatele ADO.NET, kterého tento zprostředkovatel EF cílí
  • type je název kvalifikovaného typu sestavení implementace zprostředkovatele EF.

Poznámka:

Kvalifikovaný název sestavení je kvalifikovaný název oboru názvů následovaný čárkou a sestavením, ve kterém se typ nachází. Volitelně můžete také zadat verzi sestavení, jazykovou verzi a token veřejného klíče.

Tady je příklad položky vytvořené pro registraci výchozího poskytovatele SQL Serveru při instalaci Entity Framework.

<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

Průsečíky (EF6.1 dále)

Počínaje EF6.1 můžete zaregistrovat průsečíky v konfiguračním souboru. Průsečíky umožňují spouštět další logiku, když EF provádí určité operace, jako je spouštění databázových dotazů, otevírání připojení atd.

Průsečíky jsou registrovány zahrnutím elementu průsečíku pod podřízenou část oddílu entityFramework. Například následující konfigurace zaregistruje integrovaný průsečík DatabaseLogger , který bude protokolovat všechny databázové operace do konzoly.

<interceptors>
  <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"/>
</interceptors>

Protokolování databázových operací do souboru (EF6.1 a vyšší)

Registrace průsečíků prostřednictvím konfiguračního souboru je zvlášť užitečná, když chcete přidat protokolování do existující aplikace, abyste mohli ladit problém. DatabaseLogger podporuje protokolování do souboru zadáním názvu souboru jako parametru konstruktoru.

<interceptors>
  <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
    <parameters>
      <parameter value="C:\Temp\LogOutput.txt"/>
    </parameters>
  </interceptor>
</interceptors>

Ve výchozím nastavení se soubor protokolu při každém spuštění aplikace přepíše novým souborem. Místo toho se k souboru protokolu připojte, pokud už existuje, použijte něco takového:

<interceptors>
  <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
    <parameters>
      <parameter value="C:\Temp\LogOutput.txt"/>
      <parameter value="true" type="System.Boolean"/>
    </parameters>
  </interceptor>
</interceptors>

Další informace o DatabaseLoggeru a registraci průsečíků najdete v blogovém příspěvku EF 6.1: Zapnutí protokolování bez rekompilování.

Code First Default Connection Factory

Oddíl konfigurace umožňuje určit výchozí objekt pro připojení, který by code First měl použít k vyhledání databáze, která se má použít pro kontext. Výchozí objekt pro vytváření připojení se používá jenom v případě, že se do konfiguračního souboru pro kontext nepřidá žádná připojovací řetězec.

Při instalaci balíčku EF NuGet se zaregistrovala výchozí továrna pro připojení, která odkazuje na SQL Express nebo LocalDB v závislosti na tom, který z nich jste nainstalovali.

Chcete-li nastavit objekt pro vytváření připojení, zadejte název kvalifikovaného typu sestavení v elementu defaultConnectionFactory .

Poznámka:

Kvalifikovaný název sestavení je kvalifikovaný název oboru názvů následovaný čárkou a sestavením, ve kterém se typ nachází. Volitelně můžete také zadat verzi sestavení, jazykovou verzi a token veřejného klíče.

Tady je příklad nastavení vlastní výchozí továrny pro připojení:

<entityFramework>
  <defaultConnectionFactory type="MyNamespace.MyCustomFactory, MyAssembly"/>
</entityFramework>

Výše uvedený příklad vyžaduje, aby vlastní továrna měla konstruktor bez parametrů. V případě potřeby můžete zadat parametry konstruktoru pomocí elementu parameters .

Například SqlCeConnectionFactory, který je součástí Entity Framework, vyžaduje zadat invariantní název zprostředkovatele konstruktoru. Invariantní název zprostředkovatele identifikuje verzi sql Compact, kterou chcete použít. Následující konfigurace ve výchozím nastavení způsobí, že kontexty budou používat SQL Compact verze 4.0.

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="System.Data.SqlServerCe.4.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

Pokud nenastavíte výchozí objekt pro vytváření připojení, Code First použije sqlConnectionFactory odkazující na .\SQLEXPRESS. SqlConnectionFactory má také konstruktor, který umožňuje přepsat části připojovací řetězec. Pokud chcete použít jinou instanci SYSTÉMU SQL Server, než .\SQLEXPRESS můžete použít tento konstruktor k nastavení serveru.

Následující konfigurace způsobí, že Code First použije MyDatabaseServer pro kontexty, které nemají explicitní připojovací řetězec sadu.

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="Data Source=MyDatabaseServer; Integrated Security=True; MultipleActiveResultSets=True" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

Ve výchozím nastavení se předpokládá, že argumenty konstruktoru jsou typu řetězec. K této změně můžete použít atribut typu.

<parameter value="2" type="System.Int32" />

Inicializátory databáze

Inicializátory databáze se konfigurují podle kontextu. Dají se nastavit v konfiguračním souboru pomocí kontextového elementu. Tento element používá kvalifikovaný název sestavení k identifikaci kontextu, který je nakonfigurován.

Ve výchozím nastavení jsou kontexty Code First nakonfigurované tak, aby používaly inicializátor CreateDatabaseIfNotExists. Atribut disableDatabaseInitialization je u kontextového elementu, který lze použít k zakázání inicializace databáze.

Například následující konfigurace zakáže inicializaci databáze pro kontext Blogging.BlogContext definovaný v MyAssembly.dll.

<contexts>
  <context type=" Blogging.BlogContext, MyAssembly" disableDatabaseInitialization="true" />
</contexts>

K nastavení vlastního inicializátoru můžete použít element databaseInitializer .

<contexts>
  <context type=" Blogging.BlogContext, MyAssembly">
    <databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" />
  </context>
</contexts>

Parametry konstruktoru používají stejnou syntaxi jako výchozí objekty pro vytváření připojení.

<contexts>
  <context type=" Blogging.BlogContext, MyAssembly">
    <databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly">
      <parameters>
        <parameter value="MyConstructorParameter" />
      </parameters>
    </databaseInitializer>
  </context>
</contexts>

Můžete nakonfigurovat jeden z obecných inicializátorů databáze, které jsou součástí entity Framework. Atribut typu používá formát rozhraní .NET Framework pro obecné typy.

Pokud například používáte Migrace Code First, můžete databázi nakonfigurovat tak, aby se migrovala automaticky pomocí inicializátoruMigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration>.

<contexts>
  <context type="Blogging.BlogContext, MyAssembly">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Blogging.BlogContext, MyAssembly], [Blogging.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>