Параметры файла конфигурации

Entity Framework позволяет указать несколько параметров из файла конфигурации. В целом EF соответствует принципу "соглашение над конфигурацией". все параметры, обсуждаемые в этой записи, имеют поведение по умолчанию. вам нужно только изменить параметр, когда значение по умолчанию больше не соответствует вашим требованиям.

Code-Based альтернативу

Все эти параметры также можно применить с помощью кода. Начиная с EF6 мы предоставили конфигурацию на основе кода, которая предоставляет централизованный способ применения конфигурации из кода. До EF6 конфигурация по-прежнему может быть применена из кода, но для настройки различных областей необходимо использовать различные интерфейсы API. Параметр файла конфигурации позволяет легко изменять эти параметры во время развертывания без обновления кода.

Раздел конфигурации Entity Framework

Начиная с EF 4.1, можно задать инициализатор базы данных для контекста с помощью раздела appSettings файла конфигурации. В EF 4,3 мы предоставили раздел Custom entityFramework для управления новыми параметрами. Entity Framework будет по-прежнему распознать инициализаторы баз данных, установленные с использованием старого формата, но мы рекомендуем по возможности перейти к новому формату.

раздел entityFramework был автоматически добавлен в файл конфигурации проекта при установке пакета entityFramework NuGet.

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

Строки соединения

На этой странице содержатся дополнительные сведения о том, как Entity Framework определяет используемую базу данных, включая строки подключения в файле конфигурации.

Строки подключения попадают в стандартный элемент ConnectionString и не нуждаются в разделе entityFramework .

модели на основе Code First используют обычные ADO.NET строки подключения. Пример:

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

Модели на основе конструктора EF используют специальные строки подключения EF. Пример:

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

Тип конфигурации Code-Based (EF6)

Начиная с EF6, можно указать DbConfiguration для EF для использования в конфигурации на основе кода в приложении. В большинстве случаев не нужно указывать этот параметр, так как EF автоматически обнаружит ваш DbConfiguration. Дополнительные сведения о том, когда может потребоваться указать DbConfiguration в файле конфигурации, см. в разделе Перемещение DbConfiguration в конфигурации на основе кода.

Чтобы задать тип DbConfiguration, укажите полное имя типа сборки в элементе кодеконфигуратионтипе .

Примечание

Полное имя сборки — это полное имя пространства имен, за которым следует запятая, а затем сборка, в которой находится тип. При необходимости можно также указать версию сборки, язык и региональные параметры и токен открытого ключа.

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

Поставщики баз данных EF (EF6)

до EF6 части поставщика базы данных, зависящие от Entity Framework, требовалось включать в состав базового поставщика ADO.NET. Начиная с EF6, относящиеся к EF части теперь управляются и регистрируются отдельно.

Обычно вам не нужно регистрировать поставщиков самостоятельно. Обычно это происходит поставщиком при установке.

Поставщики регистрируются путем включения элемента поставщика в дочерний раздел providers раздела entityFramework . Существует два обязательных атрибута для записи поставщика:

  • invariantName идентифицирует основной поставщик ADO.NET, для которого предназначен этот поставщик EF
  • Type — это полное имя типа сборки для реализации поставщика EF

Примечание

Полное имя сборки — это полное имя пространства имен, за которым следует запятая, а затем сборка, в которой находится тип. При необходимости можно также указать версию сборки, язык и региональные параметры и токен открытого ключа.

в качестве примера здесь приведена запись, созданная для регистрации поставщика SQL Server по умолчанию при установке Entity Framework.

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

Перехватчики (EF 6.1 и выше)

Начиная с EF 6.1, можно регистрировать перехватчики в файле конфигурации. Перехватчики позволяют выполнять дополнительную логику, когда EF выполняет определенные операции, такие как выполнение запросов к базе данных, открытие подключений и т. д.

Перехватчики регистрируются путем включения элемента перехватчика в дочерний раздел перехватчиков раздела entityFramework . Например, следующая конфигурация регистрирует встроенный перехватчик датабаселогжер , который будет записывать все операции базы данных в консоль.

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

Ведение журнала операций базы данных в файл (EF 6.1/назад)

Регистрация перехватчиков с помощью файла конфигурации особенно полезна, если требуется добавить ведение журнала в существующее приложение, чтобы упростить отладку проблемы. Датабаселогжер поддерживает ведение журнала в файл, предоставляя имя файла в качестве параметра конструктора.

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

По умолчанию файл журнала будет перезаписан новым файлом при каждом запуске приложения. Чтобы присоединиться к файлу журнала, если он уже существует, используйте нечто вроде:

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

Дополнительные сведения о датабаселогжер и регистрации перехватчиков см. в записи блога EF 6,1: Включение ведения журнала безповторной компиляции.

фабрика подключений по умолчанию Code First

раздел конфигурации позволяет указать фабрику соединений по умолчанию, которую Code First следует использовать для определения местоположения базы данных, используемой для контекста. Фабрика соединений по умолчанию используется только в том случае, если строка подключения не была добавлена в файл конфигурации для контекста.

при установке пакета EF NuGet была зарегистрирована фабрика подключений по умолчанию, указывающая на SQL Express или LocalDB в зависимости от того, какая из них установлена.

Чтобы задать фабрику подключений, укажите полное имя типа сборки в элементе дефаултконнектионфактори .

Примечание

Полное имя сборки — это полное имя пространства имен, за которым следует запятая, а затем сборка, в которой находится тип. При необходимости можно также указать версию сборки, язык и региональные параметры и токен открытого ключа.

Ниже приведен пример настройки фабрики подключений по умолчанию.

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

В приведенном выше примере для пользовательской фабрики требуется конструктор без параметров. При необходимости можно указать параметры конструктора с помощью элемента Parameters .

Например, Склцеконнектионфактори, который входит в Entity Framework, требует указать неизменяемое имя поставщика для конструктора. неизменяемое имя поставщика определяет версию SQL Compact, которую вы хотите использовать. следующая конфигурация приведет к использованию контекстов SQL Compact версии 4,0 по умолчанию.

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

если не задать фабрику соединений по умолчанию, Code First использует склконнектионфактори, указав .\SQLEXPRESS . Склконнектионфактори также имеет конструктор, позволяющий переопределять части строки подключения. если вы хотите использовать экземпляр SQL Server, отличный от, .\SQLEXPRESS можно использовать этот конструктор для задания сервера.

следующая конфигурация приведет к тому, что Code First будет использовать мидатабасесервер для контекстов, для которых не задана явная строка подключения.

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

По умолчанию предполагается, что аргументы конструктора имеют тип String. Для изменения этого атрибута можно использовать атрибут Type.

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

Инициализаторы баз данных

Инициализаторы баз данных настраиваются отдельно для каждого контекста. Их можно задать в файле конфигурации с помощью элемента context . Этот элемент использует полное имя сборки для задания настраиваемого контекста.

по умолчанию Code First контексты настроены для использования инициализатора CreateDatabaseIfNotExists. В элементе context имеется атрибут дисабледатабасеинитиализатион , который можно использовать для отключения инициализации базы данных.

Например, следующая конфигурация отключает инициализацию базы данных для контекста ведения блога. BlogContext, определенного в MyAssembly.dll.

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

Для задания пользовательского инициализатора можно использовать элемент датабасеинитиализер .

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

Параметры конструктора используют тот же синтаксис, что и фабрики соединений по умолчанию.

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

Можно настроить один из универсальных инициализаторов базы данных, которые включены в Entity Framework. атрибут type использует формат платформа .NET Framework для универсальных типов.

например, при использовании Code First Migrations можно настроить автоматическую миграцию базы данных с помощью MigrateDatabaseToLatestVersion<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>