Изменения, влияющие на поставщика

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

Мы начинаем этот журнал с изменениями от 2.1 до 2.2. До 2.1 мы использовали providers-beware и providers-fyi метки для наших проблем и запросов на вытягивание.

2.2 ---> 3.x

Обратите внимание, что многие критические изменения на уровне приложения также повлияют на поставщиков.

  • 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 и в памяти.
  • 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, чтобы избежать необходимости использования внутренних типов. Это должно повлиять только на нереляционных поставщиков, так как начальный класс обрабатывается базовым реляционным классом для всех реляционных поставщиков.

2.1 ---> 2.2

Изменения только для тестирования

  • 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, чтобы проверка работоспособности было пригодным для использования.
  • 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 для улучшения вывода типов хранилища аргументов и результатов.