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

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

Альтернатива на основе кода

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

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

Начиная с EF4.1 можно задать инициализатор базы данных для контекста с помощью приложения Параметры раздела файла конфигурации. В EF 4.3 мы представили раздел custom entityFramework для обработки новых параметров. Entity Framework по-прежнему распознает наборы инициализаторов базы данных с использованием старого формата, но рекомендуется перейти к новому формату, где это возможно.

Раздел entityFramework был автоматически добавлен в файл конфигурации проекта при установке пакета 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>

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

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

строки Подключение ion идут в стандартном элементе connectionStrings и не требуют раздела entityFramework.

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

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

Модели на основе EF Designer используют специальные строка подключения 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>

Тип конфигурации на основе кода (EF6 Onwards)

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

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

Примечание.

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

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

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

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

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

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

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

Примечание.

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

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

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

Перехватчики (EF6.1 в сторону)

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

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

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

Ведение журнала операций базы данных в файл (EF6.1)

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

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

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

Фабрика Подключение ion по умолчанию для кода

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

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

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

Примечание.

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

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

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

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

Например, SqlCe Подключение ionFactory, включенный в 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 использует Sql Подключение ionFactory, указывая на .\SQLEXPRESS. Sql Подключение ionFactory также имеет конструктор, позволяющий переопределить части строка подключения. Если вы хотите использовать экземпляр SQL Server, отличный .\SQLEXPRESS от этого конструктора, для задания сервера.

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

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

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

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

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

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

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

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

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

Элемент databaseInitializer можно использовать для задания настраиваемого инициализатора.

<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. Атрибут типа использует формат платформа .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>