Поделиться через


строки и модели Подключение ion

В этом разделе описывается, как Entity Framework обнаруживает, какое подключение к базе данных следует использовать и как его можно изменить. Модели, созданные с помощью кода First и конструктора EF, рассматриваются в этом разделе.

Обычно приложение Entity Framework использует класс, производный от DbContext. Этот производный класс вызовет один из конструкторов базового класса DbContext для управления:

  • Как контекст будет подключаться к базе данных— то есть как найден или используется строка подключения
  • Будет ли контекст использовать вычисление модели с помощью кода first или загрузки модели, созданной с помощью конструктора EF
  • Дополнительные дополнительные параметры

В следующих фрагментах показано, как можно использовать конструкторы DbContext.

Использование кода First с подключением по соглашению

Если в приложении нет другой конфигурации, вызов конструктора без параметров в DbContext приведет к запуску DbContext в режиме Code First с подключением к базе данных, созданной соглашением. Например:

namespace Demo.EF
{
    public class BloggingContext : DbContext
    {
        public BloggingContext()
        // C# will call base class parameterless constructor by default
        {
        }
    }
}

В этом примере DbContext использует полное имя производного класса контекста (Demo.EF.BloggingContext) в качестве имени базы данных и создает строка подключения для этой базы данных с помощью SQL Express или LocalDB. Если оба установлены, будет использоваться SQL Express.

Visual Studio 2010 включает SQL Express по умолчанию и Visual Studio 2012 и более поздних версий включает LocalDB. Во время установки пакет NuGet EntityFramework проверка, какой сервер базы данных доступен. Затем пакет NuGet обновит файл конфигурации, задав сервер базы данных по умолчанию, который Code First использует при создании подключения по соглашению. Если sql Express запущен, он будет использоваться. Если SQL Express недоступен, localDB будет зарегистрирован в качестве значения по умолчанию. Изменения в файле конфигурации не вносятся, если он уже содержит параметр для фабрики подключений по умолчанию.

Использование code First с подключением по соглашению и указанному имени базы данных

Если вы не сделали никакой другой конфигурации в приложении, вызов конструктора строки в DbContext с именем базы данных, которую вы хотите использовать, приведет к запуску DbContext в режиме Code First с подключением к базе данных, созданной соглашением, к базе данных этого имени. Например:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("BloggingDatabase")
    {
    }
}

В этом примере DbContext использует "BloggingDatabase" в качестве имени базы данных и создает строка подключения для этой базы данных с помощью SQL Express (установленной с Visual Studio 2010) или LocalDB (установленной с Visual Studio 2012). Если оба установлены, будет использоваться SQL Express.

Использование code First с строка подключения в файле app.config/web.config

Вы можете поместить строка подключения в файл app.config или web.config. Например:

<configuration>
  <connectionStrings>
    <add name="BloggingCompactDatabase"
         providerName="System.Data.SqlServerCe.4.0"
         connectionString="Data Source=Blogging.sdf"/>
  </connectionStrings>
</configuration>

Это простой способ сообщить DbContext использовать сервер базы данных, отличный от SQL Express или LocalDB. В приведенном выше примере указывается база данных SQL Server Compact Edition.

Если имя строка подключения совпадает с именем контекста (либо с квалификацией пространства имен или без него), оно будет найдено DbContext при использовании конструктора без параметров. Если имя строка подключения отличается от имени контекста, можно сообщить DbContext использовать это соединение в режиме code First, передав имя строка подключения конструктору DbContext. Например:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("BloggingCompactDatabase")
    {
    }
}

Кроме того, можно использовать форму "name=<строка подключения name>" для строки, переданной конструктору DbContext. Например:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("name=BloggingCompactDatabase")
    {
    }
}

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

База данных и модель сначала с строка подключения в файле app.config/web.config

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

Конструктор добавит строка подключения EF в файл app.config или web.config. Это строка подключения особенно в том, что он содержит сведения о том, как найти информацию в файле EDMX. Например:

<configuration>  
  <connectionStrings>  
    <add name="Northwind_Entities"  
         connectionString="metadata=res://*/Northwind.csdl|  
                                    res://*/Northwind.ssdl|  
                                    res://*/Northwind.msl;  
                           provider=System.Data.SqlClient;  
                           provider connection string=  
                               &quot;Data Source=.\sqlexpress;  
                                     Initial Catalog=Northwind;  
                                     Integrated Security=True;  
                                     MultipleActiveResultSets=True&quot;"  
         providerName="System.Data.EntityClient"/>  
  </connectionStrings>  
</configuration>

Конструктор EF также создаст код, который сообщает DbContext использовать это соединение, передав имя строка подключения конструктору DbContext. Например:

public class NorthwindContext : DbContext
{
    public NorthwindContext()
        : base("name=Northwind_Entities")
    {
    }
}

DbContext знает, чтобы загрузить существующую модель (а не использовать code First для вычисления из кода), так как строка подключения — это EF-строка подключения, содержащая сведения об используемой модели.

Другие параметры конструктора DbContext

Класс DbContext содержит другие конструкторы и шаблоны использования, которые обеспечивают более сложные сценарии. Некоторые из них:

  • Класс DbModelBuilder можно использовать для создания модели Code First без создания экземпляра DbContext. Результатом этого является объект DbModel. Затем этот объект DbModel можно передать одному из конструкторов DbContext, когда вы будете готовы к созданию экземпляра DbContext.
  • Можно передать полную строка подключения в DbContext вместо имени базы данных или строка подключения. По умолчанию этот строка подключения используется с поставщиком System.Data.SqlClient. Это можно изменить, задав другую реализацию I Подключение ionFactory в контексте. Database.Default Подключение ionFactory.
  • Существующий объект Db Подключение ion можно использовать, передав его конструктору DbContext. Если объект подключения является экземпляром Entity Подключение ion, то модель, указанная в соединении, будет использоваться вместо вычисления модели с помощью Code First. Если объект является экземпляром другого типа (например, Sql Подключение ion), контекст будет использовать его для режима Code First.
  • Вы можете передать существующий конструктор ObjectContext конструктору DbContext, чтобы создать dbContext, упаковав существующий контекст. Это можно использовать для существующих приложений, использующих ObjectContext, но которые хотят воспользоваться DbContext в некоторых частях приложения.