Возможности, добавленные в версии EF Core 1.0

Платформы

.NET Framework 4.5.1

Включает консоль, WPF, WinForms, ASP.NET 4 и многое другое.

.NET Standard 1.3

Поддержка ASP.NET Core для .NET Framework и .NET Core в операционных системах Windows, OSX и Linux.

Моделирование

Базовое моделирование

На основе сущностей POCO со свойствами get и set для стандартных скалярных типов (int, string и т. д.).

Связи и свойства навигации

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

Встроенные соглашения

В этом варианте исходная модель создается на основе формы классов сущностей.

Текучий API

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

Заметки к данным

Это атрибуты, которые можно добавлять в классы и (или) свойства сущности и которые будут влиять на модели EF. Например, добавление [Required] сообщит платформе EF, что соответствующее свойство является обязательным.

Сопоставление в реляционной таблице

Позволяет сопоставить сущности с таблицами и (или) столбцами.

Создание значений ключа

Поддерживается создание на стороне клиентских процессов или в базе данных.

Созданные базой данных значения

Позволяет базе данных создавать значения при вставке (для значений по умолчанию) или обновлении данных (для вычисляемых столбцов).

Последовательности в SQL Server

Позволяет определить в модели объекты последовательностей.

Ограничения уникальности

Позволяет определить альтернативные ключи и связи, использующие такие ключи.

Индексы

При определении индексов в модели они автоматически добавляются в базу данных. Поддерживаются также индексы UNIQUE.

Теневые свойства состояния

Возможность определить в модели свойства, которые не объявляются и не хранятся в классе .NET, но отслеживаются и обновляются с помощью EF Core. Чаще всего применяется для свойств внешнего ключа, которые нежелательно отображать в самом объекте.

Шаблон наследования "одна таблица на иерархию"

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

Проверка модели

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

отслеживание изменений

Отслеживание изменений по моментальному снимку

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

Извещения об изменении состояния

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

Доступ к отслеживаемому состоянию

Осуществляется через DbContext.Entry и DbContext.ChangeTracker.

Присоединение отсоединенных сущностей и диаграмм

Новый API DbContext.AttachGraph позволяет повторно присоединить сущности к контексту, чтобы избежать лишних операций создания или изменения объектов.

Сохранение данных

Основные возможности функции сохранения

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

Оптимистическая блокировка

Защита от перезаписи изменений, внесенных другим пользователем после получения данных из базы данных.

Асинхронный метод сохранения SaveChanges

Позволяет освободить текущий поток для обработки других запросов, пока база данных обрабатывает команды от SaveChanges.

Транзакции базы данных

Означает, что SaveChanges всегда является атомарной (то есть либо завершается успешно полностью, либо не вносит никаких изменений в базу данных). Также для транзакций предоставлены специальные API, которые позволяют совместно использовать транзакции в нескольких экземплярах контекста и т. д.

Реляционные базы данных: пакетная обработка инструкций

Повышает производительность, выполняя несколько команд INSERT/UPDATE/DELETE за одно обращение к базе данных.

Запрос

Базовая поддержка LINQ

Предоставляет возможность использовать LINQ для извлечения данных из базы данных.

Смешанное вычисление на клиенте и сервере

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

NoTracking

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

Безотложная загрузка

Предоставляет методы Include и ThenInclude для определения смежных данных, которые нужно извлекать вместе с основным запросом.

Асинхронный запрос

Позволяет освободить текущий поток и его ресурсы для обработки других запросов, пока база данных обрабатывает текущий запрос.

Необработанные SQL-запросы

Предоставляет метод DbSet.FromSql для получения данных с помощью необработанных SQL-запросов. Эти запросы можно также создавать с помощью LINQ.

Управление схемой базы данных

Интерфейсы API для создания и удаления баз данных

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

Миграции реляционной базы данных

Позволяет изменять схему реляционной базы данных параллельно с развитием модели.

Реконструирование из базы данных

Создает модель EF на основе существующей схемы реляционной базы данных.

Поставщики баз данных

SQL Server

Позволяет подключаться к Microsoft SQL Server 2008 и более новых версий.

SQLite

Позволяет подключаться к базе данных SQLite 3.

В памяти

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

Сторонние поставщики

Поддерживаются несколько поставщиков других ядер СУБД. Полный их список можно найти в статье Database Providers (Поставщики баз данных).