공급자에게 영향을 미치는 변경 내용

이 페이지에는 다른 데이터베이스 공급자의 작성자가 반응해야 할 수 있는 EF Core 리포지토리에서 수행된 끌어오기 요청에 대한 링크가 포함되어 있습니다. 이는 공급자를 새 버전으로 업데이트할 때 기존 타사 데이터베이스 공급자의 작성자에게 시작점을 제공하기 위한 것입니다.

2.1에서 2.2로의 변경 내용으로 이 로그를 시작합니다. 2.1 이전에는 문제 및 끌어오기 요청에 providers-bewareproviders-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에 대한 기본 클래스를 추가하고 이후 중단을 완화하기 위해 매개 변수 개체를 사용하도록 업데이트했습니다.
  • 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
    • 이제 코어, 관계형 및 추상화 리소스 문자열이 공개됩니다.
    • 이제 CoreLoggerExtensionsRelationalLoggerExtensions가 공개됩니다. 공급자는 코어 또는 관계형 수준에서 정의된 이벤트를 로깅할 때 이러한 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가 범위가 지정된 서비스에서 싱글톤 서비스로 변경되었습니다.
    • 또한 ISingletonUpdateSqlGenerator가 제거되었습니다.
  • https://github.com/dotnet/efcore/pull/15067
    • 공급자가 사용하던 많은 내부 코드가 공개되었습니다.
    • IndentedStringBuilder를 노출한 위치에서 팩터링되어 더 이상 참조할 필요가 없습니다.
    • NonCapturingLazyInitializer의 사용량을 BCL에서 LazyInitializer로 바꿔야 합니다.
  • https://github.com/dotnet/efcore/pull/14608
    • 이러한 변경 내용은 애플리케이션 호환성이 손상되는 변경 문서에서 완전히 다룹니다. 공급자의 경우 EF 코어 테스트로 인해 이러한 문제가 발생할 경우가 많을 수 있으므로 테스트 인프라가 변경되어 가능성이 낮아질 수 있기 때문에 더 큰 영향을 미칠 수 있습니다.
  • 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 메서드 통합
    • 파생 클래스에서 간소화할 수 있는 RelationalTypeMapping에 대한 2.1의 변경 내용입니다. 공급자에 대한 호환성이 손상되었다고 생각하지 않지만 공급자는 파생 형식 매핑 클래스에서 이러한 변경 내용을 활용할 수 있습니다.
  • https://github.com/dotnet/efcore/pull/12069 - 태그가 지정된 쿼리 또는 명명된 쿼리
    • LINQ 쿼리에 태그를 지정하고 해당 태그를 SQL에 주석으로 표시하기 위한 인프라를 추가합니다. 이를 수행하려면 공급자가 SQL 생성에서 반응해야 합니다.
  • https://github.com/dotnet/efcore/pull/13115 - NTS를 통해 공간 데이터 지원
    • 형식 매핑 및 멤버 번역기를 공급자 외부에서 등록할 수 있도록 허용
      • 작동하려면 공급자가 ITypeMappingSource 구현에서 base.FindMapping()을 호출해야 함
    • 공급자 간에 일관된 공간 지원을 공급자에 추가하려면 이 패턴을 따릅니다.
  • https://github.com/dotnet/efcore/pull/13199 - 서비스 공급자 만들기를 위한 향상된 디버깅 추가
    • DbContextOptionsExtensions에서 내부 서비스 공급자가 다시 빌드되는 이유를 이해하는 데 도움이 되는 새 인터페이스를 구현할 수 있도록 허용
  • https://github.com/dotnet/efcore/pull/13289 - 상태 검사에서 사용할 CanConnect API 추가
    • 이 PR은 ASP.NET Core 상태 검사에서 데이터베이스를 사용할 수 있는지 확인하는 데 사용할 개념을 CanConnect 추가합니다. 기본적으로 관계형 구현은 Exist를 호출하지만 공급자는 필요한 경우 다른 항목을 구현할 수 있습니다. 비관계형 공급자는 상태 검사를 사용할 수 있도록 새 API를 구현해야 합니다.
  • https://github.com/dotnet/efcore/pull/13306 - 기본 RelationalTypeMapping을 업데이트하여 DbParameter 크기를 설정하지 않음
    • 잘림이 발생할 수 있으므로 기본적으로 크기 설정을 중지합니다. 크기를 설정해야 하는 경우 공급자는 자체 논리를 추가해야 할 수 있습니다.
  • https://github.com/dotnet/efcore/pull/13372 - RevEng: 항상 10진수 열의 열 형식 지정
    • 규칙에 따라 구성하지 않고 스캐폴드된 코드에서 십진수 열에 대한 열 형식을 항상 구성합니다.
    • 공급자는 끝에 변경이 필요하지 않습니다.
  • https://github.com/dotnet/efcore/pull/13469 - SQL CASE 식을 생성하기 위한 CaseExpression 추가
  • https://github.com/dotnet/efcore/pull/13648 - SqlFunctionExpression에서 형식 매핑을 지정하여 인수 및 결과의 저장소 형식 유추를 개선하는 기능을 추가합니다.