Выход финальной версии .NET 7 должен состояться уже менее чем через месяц. Это произойдёт на .NET Conf 2022, которая пройдёт с 8 по 10 ноября 2022 года. А пока стала доступна 2 предварительная версия. |
.NET 7 RC 2 была протестирована в работе с Visual Studio 17.4 Preview 3 и с последней предварительной версией Visual Studio for Mac.
Где скачать?
.NET 7 RC 2
Автоматический откат на reflection при использовании генераторов исходного кода в System.Text.Json
System.Text.Json предоставляет возможность генерировать JSON сериализаторы для заданных классов. Однако, использование такого сериализатора с неизвестным ему типом приведет к выбросу InvalidOperationException.
В Release Candidate 2 появилась возможность включить автоматический откат на использование reflection в таких ситуациях. Для этого необходимо добавить в проект следующую настройку:
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Text.Json.Serialization.EnableSourceGenReflectionFallback" Value="true" />
</ItemGroup>
Новые анализаторы кода
В .NET 7 RC2 появилось два новых анализатора кода, которые проверяют следующее:
- Корректность реализации интерфейсов математики (Generic Math).
- Наличие вызовов методов System.IntPtr и System.UIntPtr, поведение которых может отличаться в .NET 6 и .NET 7.
ASP.NET Core 7 RC 2
Улучшение кэширования
- Кэшированные данные раньше сохранялись в JSON. Теперь для этого используется бинарный формат, который компактнее и быстрее обрабатывается.
- Появилась возможность отдельно кэшировать данные для разных доменов (до этого у каждого домена был свой кэш). Для этого добавлен новый метод SetVaryByHost:
builder.Services.AddOutputCache(options =>
{
options.AddBasePolicy(builder => builder.SetVaryByHost(false));
}
- Теперь можно создать OutputCachePolicyBuilder без настроек по умолчанию.
- Многие методы настройки кэширования получили префикс “Set” чтобы подчеркнуть что они меняют соответствующие свойства.
Запросы аутентификации с msal.js
В приложениях Blazor стала доступна динамическая аутентификация с произвольными параметрами при помощи Microsoft Identity Platform. Эта возможность реализована в библиотеке msal.js.
Улучшенная диагностика аутентификации в Blazor WebAssembly
Для отладки процесса аутентификации можно включить подробную диагностику при помощи следующей настройки:
"Logging": {
"LogLevel": {
"Microsoft.AspNetCore.Components.WebAssembly.Authentication": "Debug"
}
}
Экспериментальная поддержка многопоточности в WebAssembly
В .NET 7 RC 2 появилась экспериментальная поддержка многопоточности в WebAssembly на базе Web Workers. Для её использования необходимо установить опциональную загрузку (optional workload) wasm-experimental и добавить в проект пакет Microsoft.NET.WebAssembly.Threading. После этого можно использовать класс Thread для создания отдельных потоков, которые будут выполняться при помощи Web Worker.
Как уже было отмечено, поддержка потоков в данный момент экспериментальная и существует ряд ограничений. Например, JSExport , JSImport и поддержка WebSocket пока доступны только из основного потока. Также еще не реализована поддержка Firefox.
Entity Framework 7 RC 2
С момента выхода первой предварительной версии было исправлено 84 ошибки.
Во второй предварительной версии Entity Framework 7 сделан фокус на возможности использовать JSON-колонки.
Большинство баз данных позволяют сохранять объекты в JSON формате в отдельной колонке. В запросах можно осуществлять поиск внутри таких объектов и возвращать их части в качестве результата.
Для использования данной возможности необходимо указать какие свойства будут сохранены как JSON объект. Например, у Customer есть свойство Contact которое, в свою очередь, содержит свойство Address. Следующая конфигурация позволит сохранять свойство Contact вместе с Address в JSON-колонку базы данных.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().OwnsOne(
customer => customer.Contact, b =>
{
b.ToJson();
b.OwnsOne(contact => contact.Address);
});
}
Запросы к таким сущностям в Entity Framework выглядят как обычно. Например:
List customers = await context.Customers
.Where(customer => customer.Contact.Address.City == cityToFind)
.ToListAsync();
Обновление данных также ничем не отличается от обычного использования SaveChanges(…) и SaveChangesAsync(…). Но тут стоит отметить, что в зависимости от объема изменений Entity Framework может как заменить весь JSON объект, так и изменить отдельные данные в нем.
В предварительной версии есть ряд ограничений. Например, нет поддержки данной возможности в сторонних провайдерах (PostgreSQL и MySQL).
Также уже известно, что в финальную версию Entity Framework 7 не войдет часть функционала:
Он будет доступен позже.
Дополнительные ссылки
Официальные анонсы от Microsoft можно найти по следующим ссылкам:
Кроме того, доступна следующая дополнительная информация: