Entity Framework Core
Entity Framework (EF) Core — это простая, кроссплатформенная и расширяемая версия популярной технологии доступа к данным Entity Framework с открытым исходным кодом.
EF Core может использоваться в качестве объектно-реляционного модуля сопоставления (O/RM), который:
- Позволяет разработчикам .NET работать с базой данных с помощью объектов .NET.
- Устраняет необходимость в большей части кода для доступа к данным, который обычно приходится писать.
EF Core поддерживает множество систем баз данных. Дополнительные сведения см. в разделе Поставщики баз данных.
Модель
В EF Core доступ к данным осуществляется с помощью модели. Модель состоит из классов сущностей и объекта контекста, который представляет сеанс взаимодействия с базой данных. Объект контекста позволяет выполнять запросы и сохранять данные. Дополнительные сведения см. в разделе Создание модели.
EF поддерживает следующие подходы к разработке моделей:
- Создание модели на основе существующей базы данных.
- Ручной код модели для сопоставления базы данных.
- После создания модели используйте Миграции EF для создания базы данных на основе модели. Миграции позволяют развивать базу данных по мере изменения модели.
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace Intro;
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0");
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
Выполнение запроса
Экземпляры классов сущностей извлекаются из базы данных с помощью LINQ. Дополнительные сведения см. в разделе Выполнение запросов к данным.
using (var db = new BloggingContext())
{
var blogs = db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToList();
}
Сохранение данных
Для создания, удаления и изменения данных в базе данных используются экземпляры классов сущностей. Дополнительные сведения см. в разделе Сохранение данных.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
db.SaveChanges();
}
Рекомендации по технологиям O/RM для EF
Хотя EF Core хорошо подходит для абстрагирования многих деталей при программировании, существуют некоторые рекомендации, которые применяются ко всем технологиям O/RM и помогают избежать распространенных ошибок в рабочих приложениях.
- Знания базового сервера базы данных на промежуточном уровне или выше необходимы для проектирования, отладки, профилирования и переноса данных в рабочих приложениях с высокой производительностью. Например, знание первичных и внешних ключей, ограничений, индексов, нормализации, инструкций DML и DDL, типов данных, профилирования и т. д.
- Функциональное и интеграциочное тестирование. Важно реплицировать рабочую среду как можно ближе:
- Находите проблемы в приложениях, которые отображаются только при использовании определенных версий или выпуска сервера базы данных.
- Перехватывать критические изменения при обновлении EF Core и других зависимостей. Например, при добавлении или обновлении платформ, таких как ASP.NET Core, OData или AutoMapper. Эти зависимости могут повлиять на EF Core неожиданным образом.
- Производительность и нагрузочное тестирование с репрезентативными нагрузками. Упрощенное использование некоторых функций затрудняет масштабирование. К таким случаям относятся: использование Includes в нескольких коллекциях, интенсивное применение отложенной загрузки, условные запросы к неиндексированным столбцам, массовые обновления и вставки с использованием созданных хранилищем значений, отсутствие обработки параллелизма, крупные модели и недостаточная политика кэширования.
- Проверка безопасности: например, обработка строка подключения и других секретов, разрешений базы данных для операций без развертывания, проверка входных данных для необработанного SQL, шифрование конфиденциальных данных.
- Убедитесь, что ведение журнала и диагностика настроены в достаточной степени и в удобной форме. Например, соответствующая конфигурация ведения журнала, теги запросов и Application Insights.
- Восстановление после ошибок. Проанализируйте непредвиденные ситуации для распространенных сценариев сбоев, такие как откат версий, резервные серверы, горизонтальное масштабирование и балансировка нагрузки, устранение атак типа "отказ в обслуживании" и резервное копирование данных.
- Развертывание и миграция приложений. Спланируйте, как будет применяться миграция во время развертывания. Если миграция выполняется при запуске приложения, на нее могут негативно повлиять проблемы с параллелизмом, к тому же для нее потребуются более высокие разрешения по сравнению с обычной работой. Используйте промежуточное хранение, чтобы упростить восстановление после неустранимых ошибок во время миграции. Дополнительные сведения см. в разделе Применение миграций.
- Подробное изучение и тестирование созданных миграций. Необходимо тщательно протестировать миграции перед применением к рабочим данным. Форму схемы и типы столбцов невозможно легко изменить, если таблицы содержат рабочие данные. Например, в SQL Server
nvarchar(max)
иdecimal(18, 2)
редко являются наиболее подходящими типами для столбцов, сопоставленных со строковыми и десятичными свойствами. Однако в EF они используются по умолчанию, так как EF не знает о вашем конкретном сценарии.
Следующие шаги
Вводные руководства см. в разделе Начало работы с Entity Framework Core.