Начинаем работу с ASP.NET Core и Entity Framework 6¶
Paweł Grudzień, Damien Pontifex
В этой статье мы покажем вам, как использовать Entity Framework 6 в ASP.NET Core приложении.
+.. contents:: Разделы: + :local: + :depth: 1
Введение¶
Прежде чем мы начнем, убедитесь, что вы компилируете, используя .NET Framework, поскольку Entity Framework 6 не поддерживает .NET Core. Если вам нужен кроссплатформенный функционал, то вам необходим `Entity Framework Core`_.
В файле project.json укажите одну цель для всего .NET Framework:
"frameworks": {
"net46": {}
}
Настройка строк соединений и внедрения зависимостей¶
Проще всего напрямую получать строки соединений и настраивать внедрение зависимостей экземпляра DbContext
.
В подклассе DbContext
должен быть конструктор, который принимает строку соединения:
1 2 3 4 5 6 | public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
}
|
В классе Startup
внутри ConfigureServices
надо добавить фабричный контекстный метод со строкой соединения. Определенный контекст должен использоваться в одной области видимости, чтобы Entity Framework эффективно и надежно работал.
1 2 3 4 5 6 | public void ConfigureServices(IServiceCollection services)
{
services.AddScoped((_) => new ApplicationDbContext(Configuration["Data:DefaultConnection:ConnectionString"]));
// Configure remaining services
}
|
Миграция настроек из файла конфигурации в код¶
Entity Framework 6 делает возможным, чтобы конфигурация была определена в xml (в web.config или app.config) или в коде. Что касается ASP.NET Core, то вся конфигурация основана на коде.
Чтобы работать с такой конфигурацией, надо создать подкласс System.Data.Entity.Config.DbConfiguration
и применить System.Data.Entity.DbConfigurationTypeAttribute
к подклассу DbContext
.
Наш файл config обычно выглядит вот так:
1 2 3 4 5 6 7 8 9 10 | <entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
|
Элемент defaultConnectionFactory
настраивает фабрику для соединений. Если этот атрибут не установлен, тогда значением по умолчанию будет SqlConnectionProvider
. А с другой стороны, если значение установлено, данный класс будет использоваться для создания DbConnection
с его методом CreateConnection
. Если у данной фабрики нет конструктора по умолчанию, тогда вы должны добавить параметры, которые должны сконструировать объект.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [DbConfigurationType(typeof(CodeConfig))] // point to the class that inherit from DbConfiguration
public class ApplicationDbContext : DbContext
{
[...]
}
public class CodeConfig : DbConfiguration
{
public CodeConfig()
{
SetProviderServices("System.Data.SqlClient",
System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
}
|
Резюме¶
Entity Framework 6 является ORM библиотекой, которая легко способна объединять классы с сущностями БД. Эти возможности делают EF очень популярным, так что миграция больших частей кода для многих проектов нежелательна. В этой статье мы показали, как избегать миграцию, чтобы фокусироваться на других новых возможностях ASP.NET.