Изменения, влияющие на поставщика
Эта страница содержит ссылки на запросы на вытягивание, сделанные в репозитории EF Core, которые могут требовать от авторов других поставщиков баз данных реагировать. Цель состоит в том, чтобы предоставить отправную точку для авторов существующих сторонних поставщиков баз данных при обновлении своего поставщика до новой версии.
Мы начинаем этот журнал с изменениями от 2.1 до 2.2. До 2.1 мы использовали providers-beware
и providers-fyi
метки для наших проблем и запросов на вытягивание.
Обратите внимание, что многие критические изменения на уровне приложения также повлияют на поставщиков.
- https://github.com/dotnet/efcore/pull/14022
- Удалены устаревшие API и свернуты необязательные перегрузки параметров
- Удален databaseColumn.GetUnderlyingStoreType()
- https://github.com/dotnet/efcore/pull/14589
- Удалены устаревшие API
- https://github.com/dotnet/efcore/pull/15044
- Подклассы CharTypeMapping, возможно, были нарушены из-за изменений поведения, необходимых для исправления нескольких ошибок в базовой реализации.
- https://github.com/dotnet/efcore/pull/15090
- Добавлен базовый класс для IDatabaseModelFactory и обновлен для использования объекта paramater для устранения будущих разрывов.
- https://github.com/dotnet/efcore/pull/15123
- Используемые объекты параметров в MigrationsSqlGenerator для устранения будущих разрывов.
- https://github.com/dotnet/efcore/pull/14972
- Явная настройка уровней журнала требует некоторых изменений в API, которые могут использовать поставщики. В частности, если поставщики используют инфраструктуру ведения журнала напрямую, это изменение может нарушить использование. Кроме того, поставщики, использующие инфраструктуру (которая будет общедоступной), должны быть производными от
LoggingDefinitions
илиRelationalLoggingDefinitions
. Примеры см. в примерах поставщиков SQL Server и в памяти.
- Явная настройка уровней журнала требует некоторых изменений в API, которые могут использовать поставщики. В частности, если поставщики используют инфраструктуру ведения журнала напрямую, это изменение может нарушить использование. Кроме того, поставщики, использующие инфраструктуру (которая будет общедоступной), должны быть производными от
- https://github.com/dotnet/efcore/pull/15091
- Теперь строки ресурсов основных, реляционных и абстракций являются общедоступными.
CoreLoggerExtensions
иRelationalLoggerExtensions
теперь являются общедоступными. Поставщики должны использовать эти API при ведении журнала событий, определенных на уровне ядра или реляционного уровня. Не обращаться к ресурсам ведения журнала напрямую; они все еще являются внутренними.IRawSqlCommandBuilder
изменилось с одноэлементной службы на службу областьIMigrationsSqlGenerator
изменилось с одноэлементной службы на службу область
- https://github.com/dotnet/efcore/pull/14706
- Инфраструктура для создания реляционных команд была общедоступна, поэтому ее можно безопасно использовать поставщиками и немного рефакторинговать.
- https://github.com/dotnet/efcore/pull/14733
ILazyLoader
изменилось с область службы на временную службу
- https://github.com/dotnet/efcore/pull/14610
IUpdateSqlGenerator
изменилось с службы область d на одноэлементную службу- Кроме того,
ISingletonUpdateSqlGenerator
было удалено
- https://github.com/dotnet/efcore/pull/15067
- Много внутреннего кода, который использовался поставщиками, в настоящее время был открыт
- Она больше не должна быть нексарной для ссылки
IndentedStringBuilder
, так как она была факторирована из мест, которые разоблачили его NonCapturingLazyInitializer
Использование должно быть замененоLazyInitializer
на BCL
- https://github.com/dotnet/efcore/pull/14608
- Это изменение полностью рассматривается в документе критических изменений приложения. Для поставщиков это может оказать больше влияния, так как тестирование EF Core часто может привести к возникновению этой проблемы, поэтому тестовая инфраструктура изменилась, чтобы сделать это менее вероятным.
- https://github.com/dotnet/efcore/issues/13961
EntityMaterializerSource
упрощено
- https://github.com/dotnet/efcore/pull/14895
- Преобразование StartsWith изменилось таким образом, чтобы поставщики могли потребовать или отреагировать
- https://github.com/dotnet/efcore/pull/15168
- Изменены службы набора соглашений. Теперь поставщики должны наследоваться от ProviderConventionSet или RelationalConventionSet.
- Настройки можно добавлять через
IConventionSetCustomizer
службы, но это предназначено для использования другими расширениями, а не поставщиками. - Соглашения, используемые во время выполнения, должны разрешаться из
IConventionSetBuilder
.
- https://github.com/dotnet/efcore/pull/15288
- Начальное использование данных было рефакторингировано в общедоступный API, чтобы избежать необходимости использования внутренних типов. Это должно повлиять только на нереляционных поставщиков, так как начальный класс обрабатывается базовым реляционным классом для всех реляционных поставщиков.
- https://github.com/dotnet/efcore/pull/12057 — Разрешить настраиваемые делиметры SQL в тестах
- Тестирование изменений, позволяющих нестрогую сравнение с плавающей запятой в BuiltInDataTypesTestBase
- Тестирование изменений, позволяющих повторно использовать тесты запросов с различными делиметрами SQL
- https://github.com/dotnet/efcore/pull/12072 — Добавление тестов DbFunction в тесты реляционной спецификации
- Таким образом, эти тесты могут выполняться для всех поставщиков баз данных
- https://github.com/dotnet/efcore/pull/12362 — очистка асинхронного теста
- Удаление
Wait
вызовов, ненужимый асинхронный и переименованный некоторые методы тестирования
- Удаление
- https://github.com/dotnet/efcore/pull/12666 — Объединение инфраструктуры тестирования ведения журнала
- Добавлена и удалена
CreateListLoggerFactory
предыдущая инфраструктура ведения журнала, которая потребует от поставщиков, использующих эти тесты для реагирования
- Добавлена и удалена
- https://github.com/dotnet/efcore/pull/12500 — Выполнение дополнительных тестов запросов синхронно и асинхронно
- Изменены имена тестов и факторинг, которые потребуют от поставщиков, использующих эти тесты для реагирования
- https://github.com/dotnet/efcore/pull/12766 — переименование навигаций в модели ComplexNavigations
- Поставщики, использующие эти тесты, могут потребовать реагирования
- https://github.com/dotnet/efcore/pull/12141 — возврат контекста в пул вместо удаления в функциональных тестах
- Это изменение включает некоторые тестовые рефакторинг, которые могут требовать от поставщиков реагирования
- https://github.com/dotnet/efcore/pull/12109 — Консолидация методов RelationalTypeMapping.Clone
- Изменения в версии 2.1 для РеляционногоTypeMapping позволили упростить производные классы. Мы не считаем, что это было нарушением для поставщиков, но поставщики могут воспользоваться этим изменением в своих классах сопоставления производных типов.
- https://github.com/dotnet/efcore/pull/12069 — помеченные или именованные запросы
- Добавляет инфраструктуру для тегов запросов LINQ и отображения этих тегов в виде комментариев в SQL. Это может потребовать от поставщиков реагирования в создании SQL.
- https://github.com/dotnet/efcore/pull/13115 — поддержка пространственных данных с помощью NTS
- Позволяет регистрировать сопоставления типов и переводчики-члены за пределами поставщика
- Поставщики должны вызывать базу. FindMapping() в реализации ITypeMappingSource для его работы
- Следуйте этому шаблону, чтобы добавить поддержку пространственной поддержки поставщику, согласованному между поставщиками.
- Позволяет регистрировать сопоставления типов и переводчики-члены за пределами поставщика
- https://github.com/dotnet/efcore/pull/13199 — добавление расширенной отладки для создания поставщика услуг
- Позволяет DbContextOptionsExtensions реализовать новый интерфейс, который может помочь людям понять, почему внутренний поставщик услуг создается повторно
- https://github.com/dotnet/efcore/pull/13289— добавляет API Can Подключение для использования проверка работоспособности
- Этот pr добавляет концепцию
CanConnect
, которая будет использоваться ASP.NET Core работоспособности проверка для определения доступности базы данных. По умолчанию реляционная реализация просто вызываетExist
, но поставщики могут реализовать что-то другое при необходимости. Нереляционные поставщики должны реализовать новый API, чтобы проверка работоспособности было пригодным для использования.
- Этот pr добавляет концепцию
- https://github.com/dotnet/efcore/pull/13306 — обновите базовый реляционный типMapping, чтобы не задать размер DbParameter
- Остановите настройку размера по умолчанию, так как это может привести к усечению. Поставщикам может потребоваться добавить собственную логику, если необходимо задать размер.
- https://github.com/dotnet/efcore/pull/13372 — RevEng: всегда указывайте тип столбца для десятичных столбцов
- Всегда настраивайте тип столбца для десятичных столбцов в шаблонном коде, а не настраивайте по соглашению.
- Поставщики не должны требовать никаких изменений в конце.
- https://github.com/dotnet/efcore/pull/13469 — добавляет CaseExpression для создания выражений SQL CASE
- https://github.com/dotnet/efcore/pull/13648 — добавляет возможность указания сопоставлений типов в SqlFunctionExpression для улучшения вывода типов хранилища аргументов и результатов.