Posted on 19. April 2019

Вышел Entity Framework Core 3.0 Preview 4

Недавно была выпущена четвертая preview-версия Entity Framework Core 3.0, доступная для NuGet, а также релизы .NET Core 3.0 Preview 4 и ASP.NET Core 3.0 Preview 4. Эта версия рекомендуема к установке для того, чтобы протестировать новый функционал и оценить фундаментальные изменения.

Что нового в EF Core 3.0 Preview 4?

Эта preview-версия содержит более 50 исправлений ошибок и улучшений функционала. Вы можете запросить у трекера проблем полный список исправлений в Preview 4, а также в Preview 3 и Preview 2.

Некоторые из наиболее важных изменений: 

LINQ-запросы больше не анализируются на клиенте

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

Несмотря на то, что все еще возможно восстановить старое поведение, перенастроив оценку клиента так, чтобы он вызывал только предупреждение, все-таки рекомендуется протестировать Ваше приложение с новым значением по умолчанию. Если Вы видите исключения оценки клиента, Вы можете попробовать изменить Ваши запросы, чтобы избежать оценки клиента. Если это не сработает, Вы можете ввести вызовы AsEnumerable() или ToList(), чтобы переключить обработку запроса к клиенту в тех местах, где это возможно. Вы можете использовать необработанные SQL-запросы вместо LINQ, если ни один из этих вариантов не будет работать.

Посмотрите подробности последних изменений, чтобы узнать больше.

Если Вы столкнулись с ситуацией, когда LINQ выражение не переводится в SQL, и вместо этого Вы получаете исключение для оценки клиента, но точно знаете, какой SQL перевод Вы ожидаете получить, пожалуйста, сообщите о Вашей проблеме, чтобы в дальнейшем она была решена в EF Core.

Среда EF Core больше не является частью ASP.NET Core платформы

Обратите внимание, что это изменение было добавлено еще в Preview 1, но ранее не было представлено.

Основным последствием этого изменения является то, что независимо от того, какое приложение Вы создаете или какую базу данных использует Ваше приложение, Вы всегда получаете EF Core, устанавливая NuGet пакет для выбранного Вами EF Core провайдера.

В любой операционной системе, поддерживаемой для .NET Core разработки, Вы можете установить preview-версию, установив провайдер для EF Core 3.0 Preview 4. Например, чтобы установить SQLite провайдер, введите его в командной строке:

$ dotnet add package Microsoft.EntityFrameworkCore.Sqlite -v 3.0.0-preview4.19216.3

Или из Package Manager Console в Visual Studio:

PM> Install-Package Microsoft.EntityFrameworkCore.Sqlite -Version 3.0.0-preview4.19216.3

Посмотрите подробности о последних изменениях, чтобы узнать еще больше.

Инструмент dotnet ef больше не является частью .NET Core SDK

Это изменение позволяет поставлять dotnet ef как обычный .NET CLI инструмент, который можно установить как глобальный или локальный инструмент. Например, чтобы иметь возможность управлять миграциями или создавать DbContext, установите dotnet ef как глобальный инструмент и введите следующую команду:

1
$ dotnet tool install --global dotnet-ef --version 3.0.0-preview4.19216.3
Посмотрите подробности фундаментальных изменений, чтобы узнать больше.

Зависимые сущности, совместно использующие таблицы со своими основными сущностями, теперь необязательны

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

Смотрите вопрос #9005 для получения дополнительной информации.

Улучшения образования ключей для базы данных в памяти

Было выпущено несколько улучшений, чтобы упростить использование базы данных в памяти для модульного тестирования. Например, каждое сгенерированное свойство теперь увеличивается независимо. Кроме того, когда база данных удаляется, генерация ключа сбрасывается и начинается с 1. Наконец, если свойство в объекте содержит значение, превышающее последнее значение, возвращаемое генератором, последнее поднимается до следующего доступного значения.

Для получения дополнительной информации смотрите вопрос #6872.

Отдельные методы для работы с необработанными SQL-запросами в виде простых или интерполированных строк

Существование перегрузок методов, принимающих SQL как простые или интерполированные строки, затрудняло прогнозирование того, какая версия будет использоваться и как будут обрабатываться параметры. Чтобы устранить эту путаницу, были добавлены новые FromSqlRaw, FromSqlInterpolated, ExecuteSqlRaw и ExecuteSqlInterpolated методы. Существующие FromSql и ExecuteSqlCommand методы уже устарели.

Смотрите вопрос #10996 для получения дополнительной информации.

Соединение с базой данных больше не остается открытым, пока не будет удален TransactionScope

Это позволяет EF Core лучше работать с провайдерами баз данных, которые оптимизированы для работы с System.Transactions, такими как SqlClient и Npgsql.

Посмотрите подробности последних изменений, чтобы узнать больше.

Анализатор кода, который обнаруживает использование внутренних API в EF Core

EF Core предоставляет некоторые из своих внутренних API в открытых типах. Например, все типы во вложенных пространствах имен EF Core с именем Internal считаются внутренними API, даже если технически они являются открытыми типами. В прошлом это позволяло разработчикам приложений непреднамеренно использовать внутренние API в своем коде. В новом анализаторе использование внутренних API-интерфейсов EF Core по умолчанию выдает предупреждение. Например:

EF1001: Microsoft.EntityFrameworkCore.Internal.MethodInfoExtensions - это внутренний API, который поддерживает инфраструктуру Entity Framework Core и не подчиняется темже стандартам совместимости, что и публичные API. Он может быть изменен или удален без предварительного уведомления в любом выпуске.

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

Смотрите вопрос #12104 для получения дополнительной информации.

Улучшена производительность итерации по отслеживаемым объектам с использованием значения .Local

Дополнительно были добавлены улучшения, чтобы итерация содержимого .Local работала в три раза быстрее. Если Вы собираетесь выполнять итерацию несколько раз, Вам все равно следует сначала вызвать ToObservableCollection().

Смотрите вопрос #14231 для получения дополнительной информации.

Концепция типов запросов была переименована без ключей

Обратите внимание, что это изменение было добавлено еще в Preview 3, но ранее не было представлено.

Типы запросов были введены в EF Core 2.1, чтобы обеспечить чтение данных из таблиц базы данных и представлений, которые не содержат уникальных ключей. Наличие типов запросов в качестве отдельного понятия от типов сущностей доказало, что они скрывают их назначение и то, что отличает их.  Это также привело к тому, что пришлось ввести некоторые нежелательные избыточности и непреднамеренные несоответствия в текущих API. Консолидация концепций и возможное удаление API типов запросов поможет устранить эту проблему.

Посмотрите подробности последних изменений, чтобы узнать больше.

Новая preview-версия Cosmos DB provider для EF Core

Несмотря на то, что это только начало, уже есть прогресс в провайдере последовательных предварительных выпусков EF Core 3.0. Например, новая версия использует преимущества нового SDK Cosmos DB, позволяет настраивать имена свойств, используемых в хранилище, обрабатывает преобразования значений, использует детерминированный подход для генерации ключей и позволяет указать область Azure для использования.

Для получения полной информации см. Список задач Cosmos DB провайдера здесь.

Что дальше?

Как подробно описано в списке новых функций, в версии 3.0 планируется реализация улучшенного LINQ, поддержка Cosmos DB, поддержка функций C# 8.0, таких как обнуляемые ссылочные типы и асинхронные коллекции, обратный инжиниринг представлений базы данных, сущности пакетов свойств и новая EF6 версия, которая может работать на .NET Core.

В первых 4 предварительных версиях большинство усилий были сосредоточены на улучшениях, которые, могли оказать наибольшее влияние на существующие приложения и провайдеров баз данных, пытающихся выполнить обновление с предыдущими версиями. Реализация этих «критических изменений» и архитектурных улучшений на ранних этапах предоставляет больше времени для сбора отзывов и реагирования на непредвиденные проблемы пользователей. Но это также означает, что многие из этих важных функций должны были ждать более поздних preview-версий. На этом этапе Вы можете ожидать, что начальная поддержка большинства функций 3.0 версии появится в течение следующих нескольких обновлений.

Для удобства отслеживания прогресса, смотрите еженедельные обновления статуса на GitHub. Вы можете подписаться на уведомления, чтобы получать электронные письма каждый раз, когда будут обновления.

И еще немного важной информации о том, что будет добавлено в будущем:

EF Core 3.0 будет ориентирован на .NET Standard 2.1

Изучив несколько вариантов, был сделан вывод, что создание целевого EF Core 3.0 объекта для .NET Standard 2.1 - лучший путь для использования преимуществ новых функций в .NET и C#, таких как интеграция с IAsyncEnumerable. Это совместимо с аналогичными решениями, выпущенными в прошлом году для ASP.NET Core 3.0 и C# 8.0, и позволяет двигаться вперед, не внедряя адаптеры совместимости, которые могут помешать возможности предоставлять новые функции в .NET Core в будущем.

Хотя Preview 4 по-прежнему предназначен для .NET Standard 2.0, для RTM-версии потребуется версия 2.1, и поэтому он не будет совместим с .NET реализациями, которые поддерживают только .NET Standard 2.0, например .NET Framework. Пользователям, которым необходимо запустить EF Core в .NET Framework, следует продолжить использование EF Core 2.1 или 2.2.

EF 6.3 будет ориентирован на .NET Standard 2.1, в дополнение к уже поддерживаемым .NET Framework версиям

Было обнаружено, что API, предлагаемые .NET Standard 2.1, подходят для EF6 поддержки без удаления каких-либо функций времени выполнения. В дополнение к .NET Standard 2.1 пакет NuFet EF 6.3 будет, как обычно, поддерживать .NET Framework 4.0 (без асинхронной поддержки) и .NET Framework 4.5 и выше. В настоящее время будет тестирование и поддержка только EF 6.3, работающего на .NET Framework и .NET Core 3.0. Но нацеливание на .NET Standard 2.1 откроет возможность работы EF 6.3 с другими .NET реализациями, при условии, что они полностью реализуют стандарт и не имеют других ограничений времени выполнения.

Подводя итоги

EF команда хотела бы поблагодарить всех за отзывы и вклад в эту preview-версию. Не забудьте попробовать последние обновления и оставляйте любые отзывы и запросы здесь.





Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading