Start Debugging

Тег: dotnet-11

309 статей · Страница1из31

Как настроить самоссылающуюся связь многие-ко-многим (подписчики и подписки) в EF Core
Моделируем подписчиков и подписки на одной сущности User в EF Core 11: что строит конвенция, почему SQL Server молча превращает один внешний ключ соединительной таблицы в ClientCascade, как сопоставить явную сущность Follow с временной меткой и как удалить пользователя без ошибок 547 и 1785.
Как пометить ответ действия контроллера как допускающий null во встроенном документе OpenAPI в ASP.NET Core
Microsoft.AspNetCore.OpenApi помечает ответ как допускающий null, только когда действие возвращает голый T? (а в .NET 10 не помечает даже Task<T?>). ActionResult<T?> и IActionResult теряют аннотацию и в .NET 10, и в .NET 11 RC2. Здесь разобрано, почему так происходит, показан проверенный трансформер операций, который это исправляет, и ловушка с 204 No Content, из-за которой спецификация лжёт, пока вы не измените форматтер MVC.
Как форматировать числа с индийской группировкой разрядов lakh/crore в .NET (NumberGroupSizes)
Используйте культуру en-IN или задайте NumberFormatInfo.NumberGroupSizes равным [3, 2], чтобы в C# выводить 12,34,56,789 вместо 123,456,789. Замеры на .NET 10 и .NET 11 RC1: как работает массив, почему CurrencyGroupSizes задаётся отдельно, ловушка invariant globalization, которая молча выводит западную группировку, и вспомогательный метод для слов lakh/crore.
Как удалить или скрыть отдельные endpoint, которые MapIdentityApi добавляет в ASP.NET Core
MapIdentityApi<TUser>() добавляет десять endpoint и не позволяет пропустить ни один из них. Вот четыре проверенных способа справиться с этим на .NET 11: скрыть endpoint из OpenAPI, заставить его возвращать 404, перекрыть его или полностью убрать из маршрутизации, плюс ловушка /confirmEmail, из-за которой регистрация превращается в 500.
Что такое ref-safe-context в C# и как компилятор определяет его для ref-локальных переменных
ref-safe-context это область, в которой ссылка на переменную остаётся валидной. Разбираем четыре контекста, правило, фиксирующее контекст ref-локальной переменной по её инициализатору, почему ref-переназначение никогда не может ни расширить, ни сузить контекст, и ошибки CS8157, CS8168, CS8374 и CS9079, которые из этого следуют, с выводом компилятора C# 14 на .NET 10 и .NET 11 RC1.
Исправление: FileInfo.Length возвращает устаревший размер файла, в который ещё идёт запись, в Windows
FileInfo кеширует размер, перечисление читает лениво обновляемую запись каталога NTFS, а процесс записи может всё ещё держать байты в своих буферах. Используйте Refresh() или, лучше, читайте длину через общий дескриптор с помощью RandomAccess.GetLength.
Fix: Settings file 'DotnetToolSettings.xml' was not found in the package
Пакет инструмента нацелен на более новую версию .NET, чем SDK, выполняющий установку, или вообще не является инструментом .NET. Используйте более новый SDK, зафиксируйте версию инструмента с подходящей папкой tools или принудительно задайте --framework.
Как сопоставлять вложенные скобки и сбалансированные теги с помощью балансирующих групп в .NET Regex
Балансирующие группы (?<name>) и (?<-name>) превращают группу захвата в .NET regex в стек, поэтому одним шаблоном можно сопоставлять произвольно вложенные скобки или теги <div>. Полный шаблон, как работает стек, захват внутреннего содержимого через (?<inner-open>) и подводные камни, проверенные на .NET 11 RC1: проверка пустого стека, катастрофический откат, NonBacktracking и смешанные типы скобок.
Что такое скомпилированная модель в EF Core 11 и когда стоит её включать
Скомпилированная модель - это сгенерированный C#-код, который воссоздаёт вашу модель EF Core без запуска OnModelCreating. Замеры на EF Core 11 RC1: загрузка модели сокращается с 714 мс до 215 мс при 500 сущностях, но путь через MSBuild (заменивший EFOptimizeContext) медленнее, устаревшие модели ломаются молча, а фильтры запросов блокируют генерацию.
Вперёд